ES6 Promise 总结

Promise 对象是 ES6 新增的异步 API 封装方案;

 

通过 new 一个 Promise 对象实例,可以创建一个单向状态机;

 

Promise 对象有三种状态,pending,fulfilled,rejected

 

pending 为初始态,fulfilled 和 rejected 为终止态;

 

通过 Promise 内制的 resolve 和 reject 函数切换 Promise 对象的状态,并传递状态绑定的数据;reject 函数相当于 throw new Error();

 

推荐写法:new Promise().then((response)=>{}).catch((err)=>{})

 

Promise.prototype.then 可以接受两个参数,参数类型为函数,分别对应 fulfilled 和 rejected 的处理函数;返回值为一个 new Promise 对象,状态为 fulfilled,绑定数据为处理函数的 return 值;then 方法可以 return 一个 Promise 对象,则下一个 then 方法会等待前一个 then 返回的 Promise 状态变化后执行;

 

Promise.prototype.catch 接受一个异常处理函数为参数,返回一个 new Promise 对象,状态为 fulfilled,绑定数据为 return 值;

 

Promise.prototype.finally ES2018 新规;

 

Promise.all(Array<Promise>): Promise 接受参数为一个 iterator 类型,常见为一个 Promise 数组,返回值为一个 new Promise 对象;当所有入参的 Promise 状态为 fulfilled 时,返回 Promise 的状态为 fullfiled,绑定数据为入参的 Promise 的绑定数据组成的数组,当入参的 Promise 有一个状态为 rejected,则返回 Promise 状态为 rejected,绑定为一个 rejected Promise 的 Error;

 

Promise.race(Array<Promise>): Promise 接受一个 Promise 数组,返回一个 new Promise,数组中最先改变状态的 Promise 的状态和结果数据,会被传递给 new Promise;

 

Promise.resolve() 根据入参的不同,返回的 Promise 状态不同;

1、参数为 Promise 对象,返回一个 new Promise 状态和数据与入参一模一样;

2、参数为一个实现了 then 方法的对象,转换后执行 then 方法,Promise.resolve(thenable) == new Promise(thenable.then);

3、除上述两种之外的参数,会作为 new Promise 的 fulfilled 状态的绑定数据;new Promise 会立刻被指为 resolved;

 

Promise.reject() 参数会作为 rejected 状态的绑定数据;

 

Promise.try()

 

注意:

1、Promise 创建的异步操作为 微任务,参考事件循环与任务队列,会在当前同步任务全部执行完毕之后执行,而宏任务会在下一次事件循环开始时执行;

2、resolve 之后的代码依然会执行,但 reject 和 throw 方法会失效;

3、Promise 内部 throw 的错误不会影响外部代码的顺序执行,throw 的错误有冒泡的性质,Promise.prototype.catch 可以捕获链式写法之前的 Error,不管是通过 then return 的新的 Promise 对象,还是原始的 Promise 对象;

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值