在 ES10 中,Promise.allSettled 方法被引入了。该方法用于处理一组 Promise 对象,它返回的是一个 Promise 对象,该 Promise 对象在所有的 Promise 对象的状态都被解决后才会解决。与 Promise.all 方法返回的 Promise 对象的不同之处在于,如果有Promise对象的状态为 rejected,Promise.all 方法将会立即停止执行,并返回一个 rejected 状态的 Promise 对象,而 Promise.allSettled 方法会等待所有 Promise 对象的状态被解决。
Promise.all 和 Promise.allSettled 的比较
让我们来看一下 Promise.all 方法和 Promise.allSettled 方法之间的比较。
Promise.all 特点
Promise.all 方法在所有 Promise 对象的状态均为解决态时返回一个 resolved 状态的 Promise 对象,并且该 Promise 对象的状态被解决时,它的结果值是一个数组,该数组包含了所有 Promise 对象的结果值。
如果其中有任意一个 Promise 对象的状态是非解决态的,那么 Promise.all 方法将立即停止执行,并返回一个 rejected 状态的 Promise 对象,并且它的结果值是第一个被 rejected 的 Promise 对象的结果值。
Promise.allSettled 特点
Promise.allSettled 方法返回一个 Promise 对象,在它的所有 Promise 对象的状态都被解决后,该 Promise 对象的状态被解决,并且它的结果值是一个数组,该数组包含了所有 Promise 对象的结果值,不论其状态是解决态或是非解决态。
如果其中有任意一个 Promise 对象的状态是非解决态的,Promise.allSettled 方法仍然将继续执行,并等待所有 Promise 对象的状态被解决,并且它的结果值是一个对象数组,该数组包含了所有 Promise 对象的状态和对应的结果值。
Promise.allSettled 方法的使用
让我们来看一个具体的使用场景,以加深对 Promise.allSettled 方法的理解。
假设我们需要对多个 Promise 对象进行处理,并将它们的结果合并成一个结果数组。考虑使用 Promise.allSettled 方法来解决这个问题。
-- -------------------- ---- ------- ----- -------- - ------------------- ----- -------- - ------------------ -------------- - --------- ----- -------- - ------------------- ----- -------- - ---------- --------- ---------- ---------------------------- --------------- -- - ----- ---------------- - --- ----- --------------- - --- ------------------------ -- - -- -------------- --- ------------ - ------------------------------------ - ---- - ------------------------------------ - --- ---------------------- ---------- ------------------ --------------------- ---------- ----------------- ---展开代码
上面的代码会输出如下结果:
fulfilled results: [1, 3] rejected results: [Error: promise 2 error]
在这个例子中,我们创建了一个包含三个 Promise 对象的数组,其中一个是已解决态的 Promise 对象,一个是非解决态的 Promise 对象,还有一个是已解决态的 Promise 对象。我们使用 Promise.allSettled 方法来处理该数组,并将其结果分别存储在两个数组中,一个数组存储已解决态的 Promise 对象的结果值,另一个数组存储非解决态的 Promise 对象的 reason。
小结
在 ES10 中,Promise.allSettled 方法被引入了,它用于处理一组 Promise 对象,并返回一个 Promise 对象,在所有的 Promise 对象的状态被解决后该 Promise 对象的状态才被解决。与 Promise.all 方法返回的 Promise 对象不同之处在于,如果有 Promise 对象的状态被 rejected,Promise.all 方法将会立即停止执行,并返回一个 rejected 状态的 Promise 对象,而 Promise.allSettled 方法会等待所有 Promise 对象的状态被解决。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67c4f39b6e1fc40e36e1a05a