AbortController
正如我们所知道的,fetch 返回一个 promise。JavaScript 通常并没有“中止” promise 的概念。那么我们怎样才能取消一个正在执行的 fetch 呢?例如,如果用户在我们网站上的操作表明不再需要某个执行中的 fetch。
为此有一个特殊的内建对象:AbortController
。它不仅可以中止 fetch,还可以中止其他异步任务。
用法非常简单。
创建一个控制器(controller)
let controller = new AbortController();
控制器是一个极其简单的对象。
它具有单个方法 abort(),
和单个属性 signal,我们可以在这个属性上设置事件监听器。
当 abort() 被调用时:
controller.signal // 就会触发 abort 事件。
controller.signal.aborted // 属性变为 true。
通常,我们需要处理两部分:
一部分是通过在 controller.signal 上添加一个监听器,来执行可取消操作。
另一部分是触发取消:在需要的时候调用 controller.abort()。
这是完整的示例(目前还没有 fetch):
let controller = new AbortController();