在 ECMAScript 2020(ES11)中,引入了一个新的 Promise 方法——Promise.allSettled()。这个方法与 Promise.all() 相似,但是它会等待所有 Promise 对象都被 settled(即 fulfilled 或 rejected)后再返回结果。在本文中,我们将详细解析 Promise.allSettled() 方法,并提供一些示例代码。
Promise.all() 和 Promise.allSettled() 的区别
在介绍 Promise.allSettled() 方法之前,我们先来回顾一下 Promise.all() 方法。Promise.all() 方法接收一个 Promise 对象数组,并且在所有 Promise 对象都被 fulfilled 后返回结果。如果其中任何一个 Promise 对象被 rejected,Promise.all() 将立即返回一个 rejected 的 Promise 对象,并返回该 Promise 对象的错误信息。
而 Promise.allSettled() 方法则不同。它接收一个 Promise 对象数组,并且在所有 Promise 对象都被 settled 后返回结果。如果其中任何一个 Promise 对象被 rejected,Promise.allSettled() 仍然会等待所有 Promise 对象都被 settled 后返回结果,并且在返回的结果中包含所有 Promise 对象的状态(fulfilled 或 rejected)以及对应的值或错误信息。
Promise.allSettled() 的语法和用法
Promise.allSettled() 方法的语法如下:
Promise.allSettled(iterable);
其中,iterable 是一个可迭代对象,例如数组或类数组对象。Promise.allSettled() 方法返回一个 Promise 对象,该对象在所有 Promise 对象都被 settled 后 resolve,并返回一个数组,该数组包含所有 Promise 对象的状态和值或错误信息。
下面是一个简单的示例,演示如何使用 Promise.allSettled() 方法:
-- -------------------- ---- ------- ----- -------- - - ------------------- ------------------- ------------------ ---------------- ------------------- -- ---------------------------- ------------- -- ----------------------
上面的示例中,我们定义了一个包含 4 个 Promise 对象的数组。其中第三个 Promise 对象被 rejected,并抛出一个错误。我们将这个数组传递给 Promise.allSettled() 方法,并在返回结果后打印结果。运行上面的代码,你将看到以下输出:
[ { status: 'fulfilled', value: 1 }, { status: 'fulfilled', value: 2 }, { status: 'rejected', reason: Error: error }, { status: 'fulfilled', value: 3 } ]
可以看到,Promise.allSettled() 方法返回了一个包含 4 个元素的数组,每个元素都是一个对象,该对象描述了对应的 Promise 对象的状态和值或错误信息。在这个示例中,第一个和第二个 Promise 对象都被 fulfilled,并返回了对应的值 1 和 2。第三个 Promise 对象被 rejected,并返回了一个错误信息。第四个 Promise 对象被 fulfilled,并返回了对应的值 3。
Promise.allSettled() 的指导意义
Promise.allSettled() 方法的引入,使得我们可以更方便地处理一组 Promise 对象的状态。在使用 Promise.all() 方法时,如果其中任何一个 Promise 对象被 rejected,我们就需要手动处理错误信息。而在使用 Promise.allSettled() 方法时,我们可以直接获取所有 Promise 对象的状态和值或错误信息,从而更容易地处理它们。
另外,Promise.allSettled() 方法还可以与 async/await 一起使用,使得我们可以更方便地处理异步任务的状态。例如,我们可以使用 async/await 结合 Promise.allSettled() 方法来并行执行多个异步任务,并在它们都完成后处理它们的状态和值或错误信息。
结论
在 ECMAScript 2020(ES11)中,引入了一个新的 Promise 方法——Promise.allSettled()。这个方法与 Promise.all() 相似,但是它会等待所有 Promise 对象都被 settled(即 fulfilled 或 rejected)后再返回结果。在使用 Promise.allSettled() 方法时,我们可以更方便地处理一组 Promise 对象的状态,同时也可以与 async/await 一起使用,使得我们可以更方便地处理异步任务的状态。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6746b395e504cb428ebea54f