Promise 中如何处理取消请求

阅读时长 4 分钟读完

在前端开发中,我们经常需要向后端发送请求获取数据。但是,如果用户在请求还未完成时离开了当前页面,这个请求就没有继续的必要了。为了避免这种无用的请求,我们需要在 Promise 中处理取消请求的问题。

Promise 中的取消请求

在 Promise 中,取消请求的实现方式有两种:通过 AbortController 和手动实现。

通过 AbortController 实现取消请求

AbortController 是一个新的 Web API,它可以用于取消 fetch 请求。下面是一个使用 AbortController 取消请求的示例代码:

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

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

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

在上面的代码中,我们首先创建了一个 AbortController 对象,然后从中获取 signal 属性,并将其传递给 fetch 函数。当我们需要取消请求时,只需要调用 controller.abort() 即可。

手动实现取消请求

在一些情况下,我们无法使用 AbortController 来取消请求。这时,我们可以手动实现取消请求。下面是一个手动实现取消请求的示例代码:

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

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

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

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

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

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

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

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

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

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

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

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

在上面的代码中,我们首先定义了一个 fetchWithCancel 函数,它返回一个包含 promise 和 cancel 函数的对象。当我们需要取消请求时,只需要调用 cancel() 函数即可。

总结

通过使用 AbortController 或手动实现取消请求,我们可以有效地避免无用的请求。在实际开发中,我们应该根据具体情况选择适合自己的方式来处理取消请求的问题。

参考资料

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

纠错
反馈