promise.all和promise.race的区别

346 阅读2分钟

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() 来等待其中一个请求完成,然后处理其结果。