ES11 新特性之 Promise.allSettled - 并行执行所有异步任务管理

阅读时长 4 分钟读完

在前端开发中,我们经常需要执行多个异步任务,并等待所有任务完成后再进行下一步操作。在过去,我们可能需要使用 Promise.all() 方法来实现这一功能。但是,如果其中一个 Promise 出现异常,Promise.all() 方法就会中断执行并抛出异常,导致其他 Promise 无法正常执行。

ES11 中新增了 Promise.allSettled() 方法,可以解决 Promise.all() 方法存在的问题,它可以并行执行所有异步任务,不受其中一个任务的异常影响,最后返回所有 Promise 对象的状态和结果。

Promise.allSettled() 方法的语法

Promise.allSettled() 方法接收一个 Promise 数组作为参数,返回一个 Promise 对象,该 Promise 对象在所有 Promise 对象都完成后才会 resolve,返回一个包含所有 Promise 对象状态和结果的数组。

其中,promises 是一个 Promise 数组,每个 Promise 对象都代表异步任务。

Promise.allSettled() 方法的使用

我们来看一个例子,假设我们需要从三个接口中获取数据,每个接口返回的数据格式不同,我们希望在所有接口数据都返回后,将三个接口的数据进行合并。

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

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

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

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

在上面的代码中,我们使用 Promise.allSettled() 方法来并行执行三个异步任务,等待所有任务完成后,输出三个任务的状态和结果。

输出结果如下:

从结果中可以看出,Promise.allSettled() 方法返回了一个包含三个 Promise 对象的状态和结果的数组。每个 Promise 对象都包含了状态和值,状态可能是 fulfilled(已完成)或 rejected(已拒绝),值是 Promise 对象的返回值或拒绝原因。

Promise.allSettled() 方法的指导意义

Promise.allSettled() 方法可以有效地解决 Promise.all() 方法存在的问题,使得我们可以更加方便地处理多个异步任务的结果。在实际开发中,我们可以使用 Promise.allSettled() 方法来执行多个异步任务,等待所有任务完成后,再进行下一步操作,从而提高代码的可读性和可维护性。

总结

ES11 中新增的 Promise.allSettled() 方法可以并行执行所有异步任务,不受其中一个任务的异常影响,最后返回所有 Promise 对象的状态和结果。在实际开发中,我们可以使用 Promise.allSettled() 方法来处理多个异步任务的结果,从而提高代码的可读性和可维护性。

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

纠错
反馈