ES10 之 Promise.allSettled() 可以返回所有 Promise 的结果

阅读时长 4 分钟读完

Promise.allSettled() 方法是 ES10 新增的一种用于处理异步请求的方式,它可以将多个 Promise 实例包装成一个新的 Promise 实例,并返回一个结果数组,其中每个元素都是一个对象,该对象表示传入 Promise 数组中对应的 Promise 对象的状态和结果。

什么是 Promise.allSettled()?

在学习 Promise.allSettled() 之前,我们先来回顾一下 Promise.all() 的用法。

Promise.all() 方法可以将多个 Promise 实例包装成一个新的 Promise 实例,并返回一个结果数组,其中每个元素都是对应的 Promise 对象的结果,只有所有的 Promise 实例都返回结果后,才能得到最终的结果。

而 Promise.allSettled() 则更进一步,不仅可以返回所有 Promise 的结果,还可以获取每个 Promise 实例的状态。在 Promise.all() 中,只有 Promise 实例都返回后才会返回一个新的 Promise,但它没有办法区分 Promise 实例是成功返回还是失败返回,而 Promise.allSettled() 则可以区分每个 Promise 实例的状态。

Promise.allSettled() 的使用

Promise.allSettled() 方法接收一个 Promise 实例数组作为参数,可以使用 Promise.allSettled() 方法等待多个 Promise 实例同时执行完毕并返回结果。

下面是 Promise.allSettled() 的示例代码:

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

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

Promise.allSettled() 返回结果

Promise.allSettled() 返回一个结果数组,数组中的每个元素都表示接收到的 Promise 实例对象的状态和结果。

每个元素都是一个包含 status 和 value 或 reason 属性的对象,其中 status 表示 Promise 实例的状态,value 或 reason 分别表示 Promise 实例的返回值或错误信息。

status 可能的值有两种:

  • fulfilled 成功返回,对应 value。
  • rejected 失败返回,对应 reason。

Promise.allSettled() 的意义

Promise.allSettled() 方法的出现使我们能够更加方便地处理多个异步请求,无论这些请求是成功返回还是失败返回,都可以一并返回给开发者。

在开发实践中,我们通常会遇到需要同时发起多个请求的情况,比如需要通过不同的接口获取不同数据,通过 Promise.allSettled() 我们可以实现同时发起多个请求,便于我们的开发和调试。

同时,Promise.allSettled() 也可以用来检查多个数据源中是否包含错误,如果所有数据源都成功返回则无需处理,否则需要根据返回值来进行处理。

总结

ES10 之 Promise.allSettled() 可以将多个 Promise 实例包装成一个新的 Promise 实例,并返回一个结果数组,数组中的每个元素都是对应的 Promise 对象的状态和结果。

使用 Promise.allSettled() 方法可以更加方便地处理多个异步请求,不论是成功还是失败返回的结果。

同时,它还可以用来检查多个数据源中是否包含错误,无疑是前端开发中非常重要的一个方法,值得我们多加学习和应用。

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

纠错
反馈