Promise.all() 中有一个 rejected Promise 后如何继续执行剩余的 Promise?

阅读时长 3 分钟读完

在前端开发中,我们常常需要同时处理多个异步操作。Promise.all() 是一个非常有用的方法,它可以将多个 Promise 对象组合成一个新的 Promise 对象,等待所有 Promise 对象都完成后再执行下一步操作。不过,当其中一个 Promise 对象被拒绝(rejected)时,Promise.all() 方法会立即返回一个 rejected Promise 对象,并停止执行剩余的 Promise 对象。这时我们该怎么办呢?

解决方案

我们可以使用 Promise.allSettled() 方法来解决这个问题。Promise.allSettled() 方法接收一个 Promise 对象数组,并返回一个新的 Promise 对象。这个新的 Promise 对象在所有 Promise 对象都完成后才会被解决(resolved),并返回一个包含所有 Promise 对象的状态和结果的数组。如果其中一个 Promise 对象被拒绝,该 Promise 对象将会被标记为失败,但不会影响其他 Promise 对象的执行。

我们可以通过遍历 Promise 对象数组的结果,来处理每个 Promise 对象的状态和结果。如果其中一个 Promise 对象被拒绝,我们可以根据具体情况来选择如何处理。比如,我们可以忽略这个错误,继续执行剩余的 Promise 对象;或者我们可以通过抛出一个新的错误来中断执行。

下面是一个示例代码,演示了如何使用 Promise.allSettled() 方法来处理多个 Promise 对象:

-- -------------------- ---- -------
----- -------- - -
  ------------------------ ----
  ------------------ -------------- - ------------
  ------------------------ ----
--

----------------------------
  ------------- -- -
    ---------------------- -- -
      -- -------------- --- ------------ -
        --------------------------
      - ---- -
        -----------------------------
      -
    ---
  --
  ------------ -- -
    ---------------------
  ---

在上面的代码中,我们创建了一个包含三个 Promise 对象的数组。第一个和第三个 Promise 对象都是成功的,第二个 Promise 对象被拒绝了。我们使用 Promise.allSettled() 方法来处理这三个 Promise 对象,并遍历每个 Promise 对象的结果。如果 Promise 对象是成功的,我们就打印出它的结果;如果 Promise 对象是失败的,我们就打印出它的错误信息。

总结

在前端开发中,我们经常需要处理多个异步操作。Promise.all() 方法是一个非常有用的方法,它可以将多个 Promise 对象组合成一个新的 Promise 对象,等待所有 Promise 对象都完成后再执行下一步操作。但是当其中一个 Promise 对象被拒绝时,Promise.all() 方法会立即返回一个 rejected Promise 对象,并停止执行剩余的 Promise 对象。为了解决这个问题,我们可以使用 Promise.allSettled() 方法来处理多个 Promise 对象,并遍历每个 Promise 对象的结果,以便根据具体情况来选择如何处理。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65e31eed1886fbafa4fa3543

纠错
反馈