ES12 的 Promise.allSettled() 初探

阅读时长 3 分钟读完

前言:本文基于ES12标准,主要探讨Promise.allSettled()方法的应用及其原理,同时提供实际使用案例。

Promise.all()方法被广泛使用于并行异步请求的场景中,其返回一个Promise对象,当所有的Promise对象完成时,才会执行then()方法;当其中一个Promise对象发生错误时,将直接执行catch()方法。

但这种方式有一个明显的缺点:当其中一个请求失败时,剩余的请求也会被中断。

Promise.allSettled()方法则解决了这种缺陷,它返回的结果不是一个错误,而是一个对象数组,对象数组的每一个元素都是一个对象。如果该Promise对象被解决,那么对象将拥有一个status属性值为 "fulfilled",并且还将包含一个value属性,该属性包含了该Promise对象的解决值。如果该Promise对象被拒绝,则对象将拥有一个status属性值为 "rejected",并且将包含一个reason属性,该属性包含了拒绝的错误。

这种方式下,即使其中有一个请求失败,剩余的请求也不会被中断。

下面展示一个简单的示例:

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

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

打印出的对象数组为:

在实际开发中,可以使用Promise.allSettled()方法来进行一些数据的校验操作。例如,我们需要从服务器端获取多个数据并进行判断,这时就可以使用Promise.allSettled()方法,当所有数据获取成功时,再将结果进行处理。下面展示一个不完整的示例:

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

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

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

总结:ES12的Promise.allSettled()方法为我们在并行异步请求的场景中提供了更加灵活的选择,同时也让我们的代码更加简洁明了。

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

纠错
反馈