Promise 异步操作的取消

阅读时长 5 分钟读完

在前端开发中,异步操作是非常常见的,例如发送 AJAX 请求、定时器等。在异步操作中,我们经常会遇到需要取消操作的情况,例如用户在做某个操作时,突然想取消,或者页面切换时需要取消之前的操作。而 Promise 提供了一种方便的方式来取消异步操作。

Promise 的取消

在 Promise 中,我们可以使用一个标志位来判断是否需要取消异步操作。例如下面的代码:

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

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

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

-- ----
---------- - -----
展开代码

在上面的代码中,我们使用一个变量 isCanceled 来表示是否需要取消异步操作。当我们需要取消操作时,将其设置为 true,Promise 的状态将会变为 rejected,并且传递一个错误对象作为参数。

取消操作的指导意义

Promise 的取消操作可以帮助我们更好地管理异步操作,避免无用的资源浪费和性能问题。例如,当用户在输入框中输入搜索关键字时,我们可以使用 Promise 来发送 AJAX 请求,当用户修改关键字时,取消之前的请求,减少不必要的网络请求。

另外,在一些长时间的异步操作中,例如上传文件、下载大文件等,我们也可以使用 Promise 的取消操作来优化用户体验,让用户可以随时取消操作,避免等待时间过长。

示例代码

下面是一个使用 Promise 取消操作的示例代码,该代码实现了一个搜索框,当用户输入关键字时,发送 AJAX 请求进行搜索,当用户修改关键字时,取消之前的请求。

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

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

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

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

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

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

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

  -- ------- -
    ---------- - ------
    ---------- - --------------
    ------------------------- -- -
      ----- --------- - ------------------------------------------
      ------------------- - ---
      ------------------------ -- -
        ----- ------ - ------------------------------
        ---------------- - -----------------
        ------------------------------
      ---
    ---------------- -- -
      ---------------------
    ---
  - ---- -
    ----- --------- - ------------------------------------------
    ------------------- - ---
  -
---
展开代码

在上面的代码中,我们使用了一个变量 lastSearch 来保存上一次的搜索请求。当用户修改关键字时,我们先取消上一次的请求,然后发送新的请求。在发送请求时,我们使用了一个标志位 isCanceled 来判断是否需要取消异步操作。在 Promise 的状态变为 rejected 后,我们使用了一个空的 catch 方法来消费错误,避免在控制台中输出错误信息。

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

纠错
反馈

纠错反馈