在 ES11 中,Promise.allSettled() 方法被引入到了 Promise API 中。这个新方法可以让我们更好地处理 Promise 数组中的多个 Promise 实例,而不用担心其中一个 Promise 实例出现错误而导致整个 Promise 数组失败。本文将详细介绍 Promise.allSettled() 的使用方法和指导意义。
Promise.allSettled() 方法的作用
Promise.allSettled() 方法可以接收一个 Promise 数组作为参数,并返回一个新的 Promise 实例。这个新的 Promise 实例在所有 Promise 实例都解决(fulfillment)或拒绝(rejection)后才会解决。与 Promise.all() 不同的是,Promise.allSettled() 不会在一个 Promise 实例拒绝时立即拒绝,而是等待所有 Promise 实例都解决后才会解决。
Promise.allSettled() 返回的 Promise 实例的解决值(fulfillment value)是一个数组,数组中的每一项都是一个对象,该对象表示一个 Promise 实例的解决状态。对象有两个属性:
- status:一个字符串,表示 Promise 实例的解决状态。可能的值有 "fulfilled" 表示解决(fulfillment),"rejected" 表示拒绝(rejection)。
- value 或 reason:一个值,表示 Promise 实例的解决值或拒绝原因。
下面是一个示例代码:
-- -------------------- ---- ------- ----- -------- - - ------------------- ------------------ ---------------- ------------------- -- ---------------------------- --------------- -- - --------------------- -- -------------- -- - --------------------- ---
输出结果如下:
[ { status: "fulfilled", value: 1 }, { status: "rejected", reason: Error: error at <anonymous>:3:18 }, { status: "fulfilled", value: 3 } ]
从输出结果可以看出,Promise.allSettled() 返回的数组中包含了每个 Promise 实例的解决状态和值或拒绝原因。
Promise.allSettled() 方法的指导意义
Promise.allSettled() 方法的引入,使得我们可以更好地处理 Promise 数组中的多个 Promise 实例。在处理 Promise 数组时,我们通常使用 Promise.all() 方法来等待所有 Promise 实例都解决后再进行下一步操作。但是,如果其中一个 Promise 实例拒绝了,整个 Promise 数组就会立即拒绝,这可能会导致我们无法得到其他 Promise 实例的解决值。
Promise.allSettled() 方法解决了这个问题。它不会在一个 Promise 实例拒绝时立即拒绝,而是等待所有 Promise 实例都解决后才会解决。这样,我们可以得到所有 Promise 实例的解决状态和值或拒绝原因,而不用担心其中一个 Promise 实例出现错误而导致整个 Promise 数组失败。
总结
ES11 中的 Promise.allSettled() 方法是一个非常有用的方法,它可以让我们更好地处理 Promise 数组中的多个 Promise 实例。与 Promise.all() 不同的是,Promise.allSettled() 不会在一个 Promise 实例拒绝时立即拒绝,而是等待所有 Promise 实例都解决后才会解决。这个新方法的引入,使得我们在处理 Promise 数组时更加方便和灵活。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66306a46d3423812e4e5435e