在 ES10 中,新增了一个静态方法 Promise.allSettled(),它可以用于处理 Promise 数组的状态,不管 Promise 的状态是成功还是失败,都会被处理。
Promise.all 和 Promise.race 的局限性
在 ES6 中,Promise.all 和 Promise.race 是非常常用的方法,它们分别用于等待所有 Promise 完成和等待任意一个 Promise 完成。
但是,Promise.all 和 Promise.race 存在一些局限性。当 Promise 数组中有一个 Promise 失败时,Promise.all 会立即返回一个失败的 Promise,而 Promise.race 会返回第一个完成的 Promise,无论它的状态是成功还是失败。
这些限制使得在处理 Promise 数组时,需要额外的逻辑来处理失败的情况。
Promise.allSettled 的作用
Promise.allSettled 方法解决了 Promise.all 和 Promise.race 的局限性,它会等待所有 Promise 完成,并返回一个包含每个 Promise 状态的数组,每个元素都是一个对象,包含以下两个属性:
- status:Promise 的状态,可能的值为 "fulfilled" 或 "rejected"。
- value:如果状态为 "fulfilled",则为 Promise 的返回值;如果状态为 "rejected",则为 Promise 的拒绝原因。
这样,我们就可以很方便地处理 Promise 数组的状态,而不需要额外的逻辑来处理失败的情况。
Promise.allSettled 的示例
下面是一个使用 Promise.allSettled 的示例:
-- -------------------- ---- ------- ----- -------- - - ------------------- ------------------ -------------- ---------- ------------------ -- ---------------------------- ------------- -- - ---------------------- -- - -------------------------- -------------- --- -- ------------ -- - --------------------- ---
输出结果如下:
fulfilled 1 rejected Error: Promise failed fulfilled 3
结论
Promise.allSettled 是一个非常有用的方法,它可以帮助我们处理 Promise 数组的状态,不管 Promise 的状态是成功还是失败,都会被处理。使用它可以让我们的代码更加简洁和易于维护。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67591e1262956301acd5e322