了解 ECMAScript 2021 (ES12) 中的 Promise.allSettled,让你的异步编程更加优雅

阅读时长 3 分钟读完

在前端开发中,异步编程是非常常见的。以往我们可能需要使用 Promise.all 来解决多个异步请求的情况,但是 Promise.all 只有在所有 Promise 都 resolve 时才会返回一个 resolve。因此,如果其中一个 Promise 被 reject 了,那么整个 Promise.all 的执行也会被打断。而在 ECMAScript 2021 (ES12) 中,引入了 Promise.allSettled,它的表现与 Promise.all 不同,可以让我们更加优雅地处理异步请求。

Promise.allSettled 的介绍

Promise.allSettled 是 Promise.all 的一个变体,它不同于 Promise.all,因为它只有在所有 Promise 都有了结果时才会返回一个 resolve。和 Promise.all 不同,Promise.allSettled 不会在其中一个 Promise 被 reject 时中断执行,相反,它会一直等待直到所有 Promise 都 settled(resolved 或 rejected)之后才会返回结果。

Promise.allSettled 的返回值是一个由每个 Promise 的状态组成的数组。每个元素都是一个对象,对象的属性值分别是每个 Promise 对应的值或原因,如下所示:

使用示例

下面是一个例子,它使用了 Promise.allSettled 来处理多个异步请求,无论请求成功或者失败,最后都能够正确返回结果。

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

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

以上代码会输出:

总结

Promise.allSettled 是 ES12 中的新特性,相较于 Promise.all 更加优雅地解决了异步请求中的问题,它会一直等待直到所有 Promise settled 后才会返回结果。这对于复杂的异步代码来说,是非常有帮助的。使用 Promise.allSettled,我们可以更加灵活地处理异步代码,处理和管理代码变得更加简单。

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

纠错
反馈