「ES12」中的 Promise.allSettled() 方法:更好地处理异步并发请求

阅读时长 4 分钟读完

在前端开发过程中,处理异步并发请求是非常常见的需求。 Promise.all() 方法可以让我们在所有 Promise 实例都 fulfilled 之后才执行某个处理逻辑,但是如果其中有一个 Promise 实例 rejected,就会中断整个并发请求,并且无法获取到其他 Promise 实例的状态。

这时候,ES12 中新增的 Promise.allSettled() 方法就能够派上用场了。

Promise.allSettled() 方法的介绍

Promise.allSettled() 方法在所有 Promise 实例都 fulfill 或 reject 后返回一个由对象组成的数组,每个对象包含一个表示对应 Promise 实例状态的 status 属性和一个表示对应 Promise 实例返回值或错误信息的 value 属性。

status 是一个字符串,可能的取值有:

  • fulfilled:表示该 Promise 实例被 fulfilled 执行
  • rejected:表示该 Promise 实例被 rejected 执行

示例代码如下:

Promise.allSettled() 方法的使用场景

下面通过一个具体的示例演示 Promise.allSettled() 方法的使用场景。

我们有一个需要进行多次请求并处理最终结果的需求:

  1. 从 API 接口 A 中获取数据,然后处理
  2. 从 API 接口 B 中获取数据,然后处理
  3. 合并处理后的结果

如果是通过 Promise.all() 方法来处理这个需求,当 API 接口 A 或 B 中有一个请求失败时,整个并发请求就会结束。这样,在失败的情况下,我们可能不得不重试整个流程。

如果是通过 Promise.allSettled() 方法来处理这个需求,当 API 接口 A 或 B 中有一个请求失败时,我们仍然可以处理另一个请求成功的情况,而无需重试整个流程。

示例代码如下:

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

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

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

总结

Promise.allSettled() 方法的出现使得我们在处理异步并发请求时变得更加的灵活和方便。在处理并发请求时,我们可以通过使用 Promise.allSettled() 方法来处理可能出现失败情况的情况,减少对整个请求流程的影响。同时,我们也可以根据返回的结果数组,更加方便地对请求结果进行筛选和处理。

但需要注意的是,Promise.allSettled() 方法需要注意性能问题。由于 Promise.allSettled() 不会中断并发请求,如果请求的数量过多,可能会导致资源的过度占用,影响应用的性能。因此,在使用 Promise.allSettled() 方法时,需要合理调整请求的数量,以避免过度占用资源的情况。

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

纠错
反馈