Promise.allSettled() Promise.all()的区别

96 阅读1分钟

Promise.allSettled() 和 Promise.all() 都是用于处理多个 Promise 对象的方法,但有一些区别:

  1. Promise.allSettled()

    • 返回一个 Promise,该 Promise 在所有给定的 Promise 对象都已经 settled(即已经 fulfilled 或 rejected)后才会 resolve。
    • 不会在任何 Promise 被 rejected 时立即抛出异常,而是等待所有 Promise 都 settled 后才会 resolve,并返回一个包含所有 Promise 结果的数组,每个元素是一个对象,包含 status 和 value 属性,status 表示 Promise 的状态("fulfilled" 或 "rejected"),value 表示 Promise 的结果或原因。
    • 适用于需要等待所有 Promise 完成并获取它们的最终状态的情况,不会因为某个 Promise 被 rejected 而中断其他 Promise 的执行。
  2. Promise.all()

    • 返回一个 Promise,该 Promise 在所有给定的 Promise 对象都 fulfilled 或有一个被 rejected 后才会 reject(即只要有一个 Promise 被 rejected,整个 Promise.all() 就会被 reject)。
    • 如果其中任何一个 Promise 被 rejected,Promise.all() 会立即返回一个 rejected 状态的 Promise,并且只会返回第一个被 rejected 的 Promise 的原因。
    • 适用于需要等待多个 Promise 都成功完成后再执行后续操作的情况,如果有一个 Promise 被 rejected,整个操作就会失败。

因此,选择使用 Promise.allSettled() 还是 Promise.all() 取决于具体的业务需求,需要根据不同情况来决定使用哪种方法。