Promise 对象 all/allSettled/any/race/finally/catch

86 阅读1分钟

Promise 对象

Promise.all

  • 接收可迭代对象。如果所有的promise状态都是解决,返回可迭代对象,对应每一个可迭代对象。如果有一个promise被拒绝,则返回一个被拒绝的promise,附带被拒绝promise的拒绝原因
  • 迭代对象中存在非promise 的数据, 原样返回

Promise.allSettled

  • 接收可迭代对象。如果所有的promise状态是解决或拒绝,返回可迭代对象,对应每一个可迭代对象的状态与结果或原因。
  • 迭代对象中存在非promise 的数据, 转为promise对象返回

Pormise.any (与all相反,对比着理解)

  • 接收可迭代对象。如果所有的promise状态都是拒绝,返回可迭代对象,对应每一个可迭代对象。如果有一个promise被解决,则返回这个被解决的promise,附带被拒绝promise的结果
  • 迭代对象中存在非promise 的数据, 转为promise对象返回

Promise.race (race 译为角逐)

  • 接收可迭代对象。如果所有的promise中有一个或多个状态是 非promise值/已解决/已拒绝的promise,返回第一个在迭代中找到的符合前面描述状态的值
  • 如果迭代对象为空, 返回的 promise状态一直为pending

Promise.then的第二个参数 与 .catch的区别

如果.then的第一个方法中抛出异常,.catch方法可以捕获到;但是.then的第二个函数捕捉不到。

Promise.finally

基于 Promise.prototype.then实现

内部实现

finally(callback) {
    this.then(callback, callback)
}

Promise.catch

基于 Promise.prototype.then实现

内部实现

catch(callback) {
    this.then(null, callback)
}