浅析Promise-1

72 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

1、什么是Promise?

Promise是异步编程的一种解决方案,可以解决回调地狱问题(代码臃肿、可读性差、耦合度高)  Promise对象是一个构造函数,用来生成Promise实例。Promise的构造函数接收一个参数,是函数,并且传入两个参数:resolve,reject,分别表示异步操作执行成功后的回调函数和异步操作执行失败后的回调函数。 Promise有三种状态:pending(执行中的状态)、fulfilled(成功时的状态)、rejected(失败时的状态)。 当promise状态发生改变,就会触发then()里面相应的回调函数处理后续步骤,当promise状态已经改变,则不会更改。

对象的状态不受外界影响,只有异步操作的结果,可以决定当前是哪一种状态一旦状态改变(从pending变为fulfilled和从pending变为rejected),就不会再变,任何时候都可以得到这个结果。

下面来一段代码了解Promise实例

var p = new Promise(function(resolve, reject){
     //做一些异步操作
     setTimeout(function(){
       console.log('执行完成');
        resolve('执行成功');
   }, 2000);
});

运行代码,会在2秒后输出“执行完成”。注意!我只是new了一个对象,并没有调用它,我们传进去的函数就已经执行了,这是需要注意的一个细节。所以我们用Promise的时候一般是包在一个函数中,在需要的时候去运行这个函数,如:

function runAsync(){
    var p = new Promise(function(resolve, reject){
    //做一些异步操作
    setTimeout(function(){
        console.log('执行完成');
        resolve('执行成功');
     }, 2000);
  });
return p; 
}
runAsync().then(function(data){
     console.log(data); //后面可以用传过来的数据做些其他操作
     //......
});

我们包装好的函数最后,会return出Promise对象,也就是说,执行这个函数我们得到了一个Promise对象。在runAsync()的返回上直接调用then方法,then接收一个参数,是函数,并且会拿到我们在runAsync中调用resolve时传的的参数。