npm 包 @jsenv/cancellation 使用教程

阅读时长 5 分钟读完

在 Web 开发中,我们经常需要处理异步任务。在某些情况下,我们可能需要取消正在执行的异步任务。例如,当用户在搜索框中输入文字时,我们需要取消之前的搜索请求并发起一个新的搜索请求。

在过去,实现异步任务的取消比较困难。但是,现在可以使用 @jsenv/cancellation 这个 npm 包来轻松实现异步任务的取消。这个包提供了一个基于 Promise 的 API,可以方便地处理任务的取消。

安装

你可以使用 npm 或者 yarn 来安装 @jsenv/cancellation:

使用方式

下面是一个简单的例子,演示了如何使用 @jsenv/cancellation。我们将使用 Promise 对象模拟一个异步任务,然后使用 @jsenv/cancellation 取消任务。

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

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

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

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

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

在上面的例子中,我们定义了一个 asyncTask 函数代表异步任务。该函数接受一个 CancellationToken 对象作为参数,用于控制任务的取消。

然后我们使用 cancelableRace 函数来创建一个用于取消 asyncTask 函数的 race。如果 cancellationToken 被 cancel,则 asyncTask 函数会被取消。

最后,我们创建一个 CancellationTokenSource 来控制 cancellationToken 的取消。在例子中,我们在执行 asyncTask 函数后立即调用 cancellationTokenSource.cancel() 来取消任务。

如果 asyncTask 函数未被取消,则其在 5 秒后返回“done”。如果 cancellationToken 被取消,则 asyncTask 函数会抛出 CancelError 异常。我们可以根据异常的 name 属性来判断任务是否被取消。

拓展功能

@jsenv/cancellation 还提供了其他拓展功能,例如通过 CancellationToken 的静态函数 fromTimeout 来定时取消异步任务。

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

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

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

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

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

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

在上面的例子中,我们使用 CancellationToken.fromTimeout 函数来创建一个新的 CancellationToken。该函数会在指定的时间后取消 CancellationToken。

然后我们等待 cancellationTokenAfterSomeTime 被取消。当 cancellationTokenAfterSomeTime 被取消时,控制权将返回到 asyncTask 函数,并且程序会输出“Task is cancelled after 9 seconds”。

总结

@jsenv/cancellation 提供了一种简单且有效的方式来取消异步任务。这个库的 API 很容易使用,而且还提供了一些拓展功能,例如定时取消,使其适用于更广泛的使用场景。你可以在你的项目中试用 @jsenv/cancellation 来提高异步任务的可控性和可靠性。

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

纠错
反馈