持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第 10 天,点击查看活动详情
静态方法
-
Promise.all(iterable) 这个静态方法接收一个可迭代的
promsie数据结构(数组,可迭代对象,Set、Map),返回一个新的Promise对象。等到所有的promise对象都有成功或者任意一个promise失败。如果所有的promsie对象都成功了,那么会返回一个数组,数组的包含iterable当中所有promsie成功的返回值,数组值的顺序和iterable当中的顺序是一样的。如果有一个promise失败了,那么返回的Promise对象会失败,并且返回的错误信息是promise失败的错误信息。const promise1 = new Promise((resolve, reject) => { setTimeout(() => { resolve("promise1"); }); }); const promise2 = new Promise((resolve, reject) => { setTimeout(() => { resolve("promise2"); }); }); const promise3 = new Promise((resolve, reject) => { setTimeout(() => { resolve("promise3"); }); }); const promise4 = new Promise((resolve, reject) => { setTimeout(() => { resolve("promise4"); }); }); Promise.all([promise1, promise2, promise3, promise4]) .then((res) => { console.log(res); // [ 'promise1', 'promise2', 'promise3', 'promise4' ] }) .catch((error) => { console.log(error); });从上面的代码我们可以看出,
Promise.all()方法我们可以接收一个可迭代的promsie数据结构,返回一个新的Promise对象。而可迭代promise数据结构返回值会传给新的promise对象的resolve()方法。我们可以在then()当中接收到这个数组。当我们其中一个promise对象返回的是reject()的时候,我们来看看会怎么样:const promise5 = new Promise((resolve, reject) => { setTimeout(() => { reject("promise5"); }); }); Promise.all([promise1, promise2, promise5, promise3, promise4]) .then((res) => { console.log(res); }) .catch((error) => { console.log("error" + error); // errorpromise5 });当我们
iterable当中的promise对象有一个返回reject()的时候,迭代将会终止,返回值会马上返回这个错误的reject()的返回值。 -
Promise.allSettled(iterable)
Promise.allSettled()接收一个可迭代的iterable数据结构,其中包含一个或多个promise对象,等到iterable当中所有的promise对象都已经敲定了(无论是兑现还是拒绝),会返回一个新的promsie对象,接收到的返回值是一个结果数组,数组的结果顺序和迭代顺序是一样的,每个结果对应一个promise对象操作完成的结果。Promise.allSettled([promise1, promise2, promise5, promise3, promise4]).then( (res) => { console.log(res); // 结果返回值 // [ // { status: 'fulfilled', value: 'promise1' }, // { status: 'fulfilled', value: 'promise2' }, // { status: 'rejected', reason: 'promise5' }, // { status: 'fulfilled', value: 'promise3' }, // { status: 'fulfilled', value: 'promise4' } // ] } );从上面的代码我们可以看出,
Promise.allSettled会将每一个promise对象的结果返回出来,并且按照iterable的迭代顺序来进行返回。而接下来我们来看看Promise.allSettled的返回值:[{ status: 'fulfilled', value: 'promise1' }],返回值的类型是一个数组,数组的每一个元素是一个对象,对象当中包含有status和value两个属性,status属性表示当前promise的返回状态,而value属性则包含了对应promise对象的返回值。 -
Promise.any(iterable) 接收一个 promise 对象的集合,当其中的任意一个 promise 成功,就返回那个成功的 promise 的值。
Promise.any([promise1, promise2, promise5, promise3, promise4]).then( (res) => { console.log(res); } );需要注意,Promise.any() 方法依然是实验性的,尚未被所有的浏览器完全支持。它当前处于 TC39 第四阶段草案(Stage 4)
-
Promise.race(iterable)
Promise.race()接收一个可迭代的iterable数据结构,当其中任意一个promise对象变成已敲定的时候,就会结束,然后返回一个新的promise对象,假如返回的是resolve()的调用,那么就可以通过then()来获取返回的结果,如果是reject()的调用,那么就可以通过catch()来捕获异常。Promise.race([promise5]) .then((res) => { console.log(res); }) .catch((error) => { console.log(error); // promise5 }); -
Promise.reject(reason) 返回一个状态为已拒绝的 Promise 对象,并将给定的失败信息传递给对应的处理函数。
-
Promise.resolve(value) 返回一个状态由给定 value 决定的 Promise 对象。如果该值是 thenable(即,带有 then 方法的对象),返回的 Promise 对象的最终状态由 then 方法执行结果决定;否则,返回的 Promise 对象状态为已兑现,并且将该 value 传递给对应的 then 方法。
实例方法
-
Promise.prototype.catch()
为 promise 添加一个被拒绝状态的回调函数,并返回一个新的 promise,若回调函数被调用,则兑现其返回值,否则兑现原来的 promise 兑现的值。
-
Promise.prototype.then()
为 promise 添加被兑现和被拒绝状态的回调函数,其以回调函数的返回值兑现 promise。若不处理已兑现或者已拒绝状态(例如,onFulfilled 或 onRejected 不是一个函数),则返回 promise 被敲定时的值。
-
Promise.prototype.finally()
为 promise 添加一个回调函数,并返回一个新的 promise。这个新的 promise 将在原 promise 被兑现时兑现。而传入的回调函数将在原 promise 被敲定(无论被兑现还是被拒绝)时被调用。