AbortController Web API 学习

概念:        

        AbortController是一个用于控制和取消异步操作的 Web API。它允许在需要时中止正在进行的异步操作,比如网络请求或定时器。通过 AbortController,可以发送一个中止信号来取消异步操作,并在需要时清理资源。

        其中当调用 abort() 方法取消异步操作时,会触发一个 AbortError 错误。需要在异步操作的 catch 块中处理这个错误,以避免未捕获的异常

简单的示例:

        演示如何使用 AbortController 来取消一个 fetch请求

const controller = new AbortController();
const signal = controller.signal;

fetch('https://api.example.com/data', { signal })
  .then(response => {
    if (response.ok) {
      return response.json();
    } else {
      throw new Error('Network response was not ok');
    }
  })
  .then(data => {
    console.log(data);
  })
  .catch(error => {
    if (error.name === 'AbortError') {
      console.log('Request aborted');
    } else {
      console.error('Error:', error.message);
    }
  });

// 在需要时取消请求
controller.abort();

        在上面的示例中,我们首先创建了一个AbortController实例,并从中获取一个signal对象,然后将该signal对象传递给fetch请求的配置中。当需要取消请求时,调用 controller.abort()方法即可中止请求,并触发一个 AbortError错误。


特点:

  1. 取消异步操作AbortController 允许您发送一个中止信号来取消正在进行的异步操作,比如网络请求或定时器。
  2. 简单易用:使用 AbortController 非常简单,只需创建一个实例并调用 abort() 方法即可取消操作。
  3. 与Fetch API 集成AbortController 与 Fetch API 集成良好,可以将 AbortController 实例的信号对象传递给 fetch 请求的配置中,实现请求的取消。
  4. 多次使用:一个 AbortController 实例可以用于多个异步操作的取消,只需在需要时重复调用 abort() 方法。

应用场景: 

        这里主要说明其与EventSource的关系及结合使用。大家都知道EventSource只支持Get请求,但是如果想要Post请求,我们该如何实现呢?大家可以查看这篇博客查看相关情况:https://blog.csdn.net/qq_44327851/article/details/135181995 

简而言之,就是我们会引入@microsoft/fetch-event-source来解决上面所说的问题,但是在这里我还要强调一点(以上面的示例为例):

       调用 controller.abort()方法会关闭与服务器的连接,但不会触发 EventSource 对象onclose()事件处理程序。相反,调用 controller.abort() 方法会立即关闭连接,而不会触发任何事件处理程序。但是controller.abort() 方法会导致 EventSource 对象的readyState属性变为 CLOSED。当调用 controller.abort() 方法方法关闭连接时,readyState属性会从 OPEN变为 CLOSED,表示连接已经关闭。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值