Promise 中的 2 个新特性:finally() 和 Promise.allSettled() 方法详解

阅读时长 4 分钟读完

Promise 是 JavaScript 中一种用于处理异步操作的对象,它可以让我们更加优雅地处理异步操作,以避免回调地狱的出现。在 ES6 中,Promise 已经被正式纳入标准,成为了 JavaScript 中不可或缺的一部分。在 Promise 中,我们经常使用的方法包括 then()、catch() 和 finally() 等。

在最新的 ECMAScript 2020 中,Promise 又新增了两个新的方法:finally() 和 Promise.allSettled()。这两个方法不仅可以帮助我们更好地处理异步操作,而且还可以让我们更加方便地处理 Promise 的状态。接下来,我们将详细介绍这两个新特性,并给出相应的示例代码。

finally() 方法

finally() 方法是 Promise 中的一个全新方法,它可以让我们在 Promise 执行结束后,无论是 resolve 还是 reject,都能够执行一些必要的操作。finally() 方法的语法如下:

其中,promise 表示要执行的 Promise 对象,onFinally 表示在 Promise 执行结束后要执行的操作。无论 Promise 的状态是成功还是失败,finally() 方法都会被执行。

下面是一个使用 finally() 方法的示例:

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

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

在上面的代码中,我们创建了一个 Promise 对象,并通过 setTimeout() 模拟了一个异步操作。在 Promise 对象执行结束后,我们使用 then() 和 catch() 方法分别处理 Promise 对象的 resolve 和 reject 状态,并在最后使用 finally() 方法输出 "Promise finished"。

Promise.allSettled() 方法

Promise.allSettled() 方法可以让我们同时处理多个 Promise 对象,并在所有 Promise 对象都执行结束后,返回每个 Promise 对象的执行结果。与 Promise.all() 方法不同的是,Promise.allSettled() 方法会等待所有 Promise 对象都执行结束后,才会返回结果。Promise.allSettled() 方法的语法如下:

其中,iterable 表示要执行的 Promise 对象数组。下面是一个使用 Promise.allSettled() 方法的示例:

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

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

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

在上面的代码中,我们创建了两个 Promise 对象,分别模拟了一个成功和一个失败的异步操作。在 Promise.allSettled() 方法中,我们将这两个 Promise 对象传入,然后使用 then() 方法输出所有 Promise 对象的执行结果。最后,我们可以得到一个包含两个 Promise 对象执行结果的数组。

总结

通过以上的介绍,我们了解了 Promise 中的两个新特性:finally() 和 Promise.allSettled() 方法。finally() 方法可以让我们在 Promise 执行结束后,无论是 resolve 还是 reject,都能够执行一些必要的操作,从而更加方便地处理 Promise 的状态;而 Promise.allSettled() 方法则可以让我们同时处理多个 Promise 对象,并在所有 Promise 对象都执行结束后,返回每个 Promise 对象的执行结果。这两个新特性不仅可以帮助我们更好地处理异步操作,而且还可以让我们更加方便地处理 Promise 的状态,提高我们的开发效率。

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

纠错
反馈