Promise.all()
和 Promise.race()
都是 Promise 的静态方法,它们的作用是将多个 Promise 对象合并成一个 Promise 对象,并根据不同的情况返回不同的结果。它们的区别在于:
- 解决方式不同
Promise.all()
在所有的 Promise 对象都成功解决后才会将一个成功的结果数组作为解决值返回,如果有一个 Promise 对象被拒绝了,则会立即将一个拒绝原因作为拒绝值返回。Promise.race()
只要有一个 Promise 对象解决或拒绝,就会将其解决值或拒绝原因作为其自身的解决值或拒绝值返回。
- 返回值不同
Promise.all()
返回一个新的 Promise 对象,如果所有的 Promise 对象都成功解决,则返回一个解决值数组,数组中的解决值按照 Promise 对象数组中的顺序排列。如果有一个 Promise 对象被拒绝,则返回一个拒绝原因。Promise.race()
返回一个新的 Promise 对象,其解决值或拒绝原因与第一个解决或拒绝的 Promise 对象相同。
- 使用场景不同
Promise.all()
适用于当我们需要等待多个异步操作全部完成,然后再进行下一步操作的场景。例如,我们需要从多个 API 请求中获取数据,然后将这些数据合并成一个结果。在这种情况下,我们可以使用Promise.all()
来等待所有的请求都完成,然后将结果合并起来。Promise.race()
适用于当我们需要等待多个异步操作中的其中一个完成,然后再进行下一步操作的场景。例如,我们需要从多个 API 请求中获取数据,但只需要获取其中一个请求的结果即可。在这种情况下,我们可以使用Promise.race()
来等待其中一个请求完成,然后处理其结果。