中止获取请求不会中止服务工作者中的相应请求

时间:2018-07-31 10:14:52

标签: javascript fetch service-worker

我正在尝试在获取处理程序代码中实现AbortSignal。到目前为止,它在前端代码中非常容易工作。每当我在上一个请求完成之前再次调用同一请求时,它将中止该请求并执行下一个请求。

但是,看来服务工作者AbortSignal中的event.request.signal不是我在请求中传递的实例。当我中止请求时,Service Worker中的请求永远不会中止。

developers.google.com上的

This article解释了AbortSignal应该如何触发Service Worker请求的信号,因为它是同一请求。不过,这篇文章似乎描述了计划中的规范,因此我不知道它是以不同的方式实现还是完全实现。

下面是代码的简化版本。

在前端调用请求:

// abort any running requests
if (this.controller) this.controller.abort();

// initialize the new request
this.controller = new AbortController();
const options = {
    method: 'GET',
    signal: this.controller.signal
};

// execute request
const response = await fetch(url, options);

// the request can't be aborted after it has finished
this.controller = null;

在服务工作者中处理提取:

self.addEventListener('fetch', (event) => {
    // it seems that event.request.signal is NOT the instance
    // that was passed in the above code

    return fetch(event.request);
});

0 个答案:

没有答案