我的 serviceworker 的逻辑是,当发生 fetch 事件时,首先它会获取一个包含一些布尔值(不是 event.request.url)的端点并根据我调用event.respondWith()的值检查该值当前 fetch 事件,我在其中提供来自缓存的响应。但是我收到以下错误,
未捕获(承诺中)DOMException:无法在“FetchEvent”上执行“respondWith”:获取事件已得到响应
我在这里检查了当m_state不等于Initial时会抛出此错误
if (m_state != Initial) {
exceptionState.throwDOMException(InvalidStateError, "The fetch event has already been responded to.");
return;
}
我怀疑由于我有一个额外的 fetch 事件,它以某种方式消耗了以前的 fetch 事件,它正在更改 m_state 变量,尽管我没有获取事件 url。我不确定可能是什么原因以及是什么它的解决方案。但为什么它说
我在下面粘贴我的代码片段。
function fetchEvt(event) {
check().then(function (status) {
if (status === 0) {
handleRequest(event);
}
});
}
function checkHash() {
return new Promise(function (resolve) {
fetch(endpoint, { credentials: 'include' }).then(function (response) {
return response.text();
}).then(function (text) {
resolve(text);
});
}
}
function handleRequest(event) {
event.respondWith(caches.match(event.request.url).then(function (Response) {
if (Response) {
return Response;
}
return fetch(event.reuqest);
}));
}
event.respondWith部分抛出错误。请建议如何解决这个问题。
编辑 :
function handleRequest(event) {
event.respondWith(checkHash().then(function (status) {
if (status === true) {
caches.match(event.request.url).then(function (Response) {
if (Response) {
return Response;
}
return fetch(event.reuqest);
});
} else if (status === false) return fetch(event.reuqest);
}));