javascript - 错误:请求对象已被使用
问题描述
我在控制台日志中不断收到此错误
未捕获(承诺中)类型错误:无法在“ServiceWorkerGlobalScope”上执行“获取”:无法使用已使用的请求对象构造请求。
我尝试更换我的服务人员,但它不起作用
self.addEventListener('install', (event) => event.waitUntil(preLoad()));
const preLoad = function () {
return caches.open('cc-offline').then((cache) => {
return cache.addAll(['/offline.html', '/index.html']);
});
}
self.addEventListener('fetch', (event) => {
event.respondWith(checkResponse(event.request).catch(function () {
return returnFromCache(event.request)
}));
event.waitUntil(addToCache(event.request));
});
const checkResponse = (request) => {
return new Promise((fulfill, reject) => {
fetch(request).then((response) => {
(response.status !== 404) ? fulfill(response) : reject()
}, reject)
});
};
const addToCache = (request) => {
return caches.open('cc-offline').then((cache) => {
return fetch(request).then((response) => {
return cache.put(request, response);
});
});
};
const returnFromCache = (request) => {
return caches.open('cc-offline').then((cache) => {
return cache.match(request).then((matching) => {
return (!matching || matching.status == 404) ? cache.match('offline.html') : matching
});
});
};
解决方案
fetch
至少在当前版本中,不允许您两次使用请求:)。在这两种情况下checkResponse
使用相同的请求对象。addToCache
您可以尝试在调用之前克隆请求对象,fetch
如此处所述为什么此代码无法执行“获取”?
推荐阅读
- google-apps-script - 发布新版 Google 表格插件
- swift - 无法以编程方式将文件图标图像添加到 xib 图像视图
- python - Pandas:如何在 MultiIndex 中格式化图例
- ruby-on-rails - 默认情况下,Rails 中的 created_at 是 Time.now.utc.to_date 吗?
- python - 无效的目录名称 Spyder Python
- java - 将类级别 @PreAuthorized 注释与方法级别 @PreAuthorzied 注释一起使用
- c# - 如何在 Windows 应用程序和许可证服务器之间建立安全连接?
- javascript - 如何显示和映射状态或 const 数据数组对象的第一个 id?
- java - 以编程方式注册 bean(使用自定义 bean 名称)
- objective-c - 生成新的原型