Promise对象的用法与实例

        Promise是处理异步请求的一种解决方案,有了Promise就可以将异步操作用同步操作的流程表达处理,避免了回调函数的嵌套。Promise有三种状态,进行中、成功和失败。状态的改变只有两种情况,进行中→成功和进行中→失败,一旦状态改变,就会一直保持这个结果。下面是一个Promise实例,我们根据实例的代码来了解Promise

const promise = new Promise(function(resolve, reject) {    //Promise构造函数接受一个函数作为参数,该函数由两个js引擎提供的函数作为参数
  if (/* 异步操作成功 */){
    resolve(value);    //状态进行中→成功时,调用resolve,并将异步操作成功的结果,通过参数传递出去
  } else {
    reject(error);     //状态进行中→失败时,调用reject,并将操作失败的结果,通过参数传递出去
  }
});

        实例生成后,我们就可以指定不同状态的回调函数了。

promise.then(function(value) {
  // 异步操作成功时执行,value为resolve传递的操作结果
}).catch(function(error) {
  // 异步操作失败时执行,也可以捕获then方法中执行的错误
}).finally(function() {
  // 不管成功和失败,都会执行,不接受任何参数,本质上是then的特例
});

        事实上,then方法可以接受两个函数作为参数,第一个函数在异步操作成功时执行,第二个函数在异步操作失败时执行,但上面的写法更好一些,理由是catch可以捕获then中的错误,写法也更接近于同步的try/catch写法。

        下面是一个实例

new Promise((resolve, reject) => {
  resolve({"name":"Annie"});
  console.log({"name":"Keith"});
}).then(r => {
  console.log(r);
  return r
});

      例子中,调用resolve后,后面的console.log({"name":"Keith"})还会继续执行,并且会首先执行。因为resolve和reject是在本轮事件的末尾执行,总是晚于本轮的同步任务。执行结果如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值