在 JavaScript 中,Promise 是处理异步操作的重要方式。在 ECMAScript 2020 中,Promise.all() 和 Promise.allSettled() 是两个值得称赞的新特性,它们都是用于处理多个 Promise 对象的。
Promise.all()
Promise.all() 方法接收一个 Promise 对象的数组作为参数,并且返回一个新的 Promise 对象。当所有的 Promise 对象都变为 fulfilled 状态时,返回的 Promise 对象才会变成 fulfilled 状态,此时它的值是一个对象数组,依次对应传入的每个 Promise 对象的值。如果其中任意一个 Promise 对象变成 rejected 状态,则返回的 Promise 对象会立刻变为 rejected 状态,并且它的值为被拒绝的那个 Promise 对象的值。
下面是一个示例:
----- -------- - ------------------- ----- -------- - --- ----------------- ------- -- ------------- -- ---------------- ------- ----- -------- - --- ---------------------- --------- ---------- ------------ -- -------------------- ------------ -- --------------------
输出结果:
-----
此时,所有 Promise 对象的状态都变为了 rejected,因此 Promise.all() 返回的结果也是一个 rejected 状态。
Promise.allSettled()
Promise.allSettled() 方法也接收一个 Promise 对象的数组作为参数,并且返回一个新的 Promise 对象。当所有的 Promise 对象都变为 fulfilled 或 rejected 状态时,返回的 Promise 对象才会变成 fulfilled 状态,此时它的值是一个对象数组,每个对象表示每个 Promise 对象的状态和值。
下面是一个示例:
----- -------- - ------------------- ----- -------- - --- ----------------- ------- -- ------------- -- ---------------- ------- ----- -------- - --- ----------------------------- --------- ---------- ------------ -- -------------------- ------------ -- --------------------
输出结果:
- - ------- ------------ ------ - -- - ------- ----------- ------- ------- -- - ------- ------------ ------ -- - -
由于 promise2 被拒绝了,因此它的状态为 rejected,而其他 Promise 对象的状态都为 fulfilled。
总结
Promise.all() 和 Promise.allSettled() 方法都是用于处理多个 Promise 对象的,它们都可以将多个
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/664440b9d3423812e42227c7