Promise.all
、Promise.race
、Promise.allSettled
和 Promise.any
是 JavaScript 中用于处理多个 Promise 对象的几种方法。它们各自有不同的用途和行为:
-
Promise.all:
- 接收一个 Promise 对象的数组作为参数。
- 只有当所有的 Promise 都成功解决(fulfilled)时,它才会解决,并且返回一个包含所有 Promise 结果的数组。
- 如果任何一个 Promise 被拒绝(rejected),
Promise.all
会立即拒绝,并且返回第一个被拒绝的 Promise 的错误。
-
Promise.allSettled:
- 接收一个 Promise 对象的数组作为参数。
- 它等待所有的 Promise 都达到最终状态(无论是解决还是拒绝),然后返回一个数组,数组中的每个元素都是一个对象,表示每个 Promise 的最终状态。
- 每个对象包含两个属性:
status
(可以是"fulfilled"
或"rejected"
)和value
(如果状态是"fulfilled"
)或reason
(如果状态是"rejected"
)。
-
Promise.any:
- 接收一个 Promise 对象的数组作为参数。
- 它在数组中的第一个解决的 Promise 解决时解决,并返回该 Promise 的结果。
- 如果 所有的 Promise 都被拒绝,
Promise.any
会拒绝,并返回一个聚合的错误,这个错误包含了所有被拒绝的 Promise 的错误。
-
Promise.race:
- 同样接收一个 Promise 对象的数组作为参数。
- 它会立即解决或拒绝,取决于数组中第一个解决或拒绝的 Promise。
- 如果第一个解决的 Promise 被解决,它返回该 Promise 的结果;如果第一个拒绝的 Promise 被拒绝,它返回该 Promise 的错误。
总结来说:
Promise.all
要求所有 Promise 都成功。Promise.race
只关心第一个解决或拒绝的 Promise。Promise.allSettled
等待所有 Promise 完成,不管它们是解决还是拒绝。Promise.any
只关心第一个解决的 Promise,但如果所有 Promise 都拒绝,则会拒绝。