ECMAScript 2019 中的标准化取消标记

在 ECMAScript 2019 中,新增加的一项特性叫做标准化取消标记(standardized and stable support to cancel promises)。

这项特性的作用是优化 JavaScript 代码中的控制流程。在以往的版本中,我们经常使用 Promise 或 async/await 解决异步请求问题。但是,如果我们需要在某些条件的情况下,终止正在进行的异步操作,就需要利用取消标记来完成。

在 ECMAScript 2019 中,取消标记已经成为了标准的 API,它提供了一种更加优雅的方式来取消异步操作。

如何使用?

使用取消标记,需要引入一个新的 API——AbortControllerAbortSignal

第一步,我们需要创建一个 AbortController 实例,这个实例可以控制一个或多个异步操作的执行状态。

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

第二步,在异步操作中,我们需要关联这个 AbortController 实例。每个 AbortController 实例都有一个signal属性。它是一个 AbortSignal 实例,可以作为异步操作的第二个参数传入,与 Promise 的 resolvereject 参数类似。

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

在这个 fetch 的例子中,我们将 controller.signal 作为 fetch 方法的第二个参数传入,表示这个异步操作可以被取消。

第三步,我们需要在异步操作中,主动调用 controller.abort() 方法来取消异步操作。

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

在这个例子中,我们将控制器的 abort() 方法放在 setTimeout() 的回调中。这样,5秒钟之后,异步操作就会被取消。

取消异步操作的优势

取消标记 API 有以下优点:

  1. 更加优雅的代码,同时能够解决异步操作相关的问题。
  2. 可以有效地管理应用程序的资源,避免无谓的资源消耗。
  3. 在一些场景下,我们可以更好地控制程序的执行流程。比如说,在大量请求屏幕上显示之前,我们可以取消屏幕请求。

Tips

  • 在使用 AbortController 的时候,一定要注意确保你的代码逻辑没有利用 settimeout() 或者 setinterval() 来处理未完成的请求。如果有的话,这些请求不能被正确的取消。

  • 除了利用 Promise.race() 来完成多个异步任务以外,我们还可以使用 Promise.all() 完成多个异步任务。

结论

标准化取消标记是 ECMAScript 2019 中新增加的一个特性,它可以优化 JavaScript 代码中的控制流程,避免出现过度等待或资源不足的情况。在尝试使用标准化取消标记的过程中,请注意谨慎使用,确保你的代码逻辑没有利用 settimeout() 或者 setinterval() 来处理未完成的请求。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/672d6038ddd3a70eb6da3c36