如何解决使用带有 responseWith
我有两段代码,我希望它们能以相同的方式工作,但它们没有 - 只有一个真正有效,我不知道为什么。
工作一个
self.addEventListener('fetch',(e)=>{
e.respondWith(handleRequest(e.request))
})
async function handleRequest(req){
const res = await fetch(req);
const cache = await caches.open(cacheName)
if(res.ok){
// add the response to the caches and return the response
await cache.put(req,res.clone())
return res;
}else{
const res = cache.match(req)
return res
}
}
不工作
self.addEventListener('fetch',(e)=>{
e.respondWith(async () => {
const res = await fetch(e.request);
const cache = await caches.open(cacheName)
if(res.ok){
// add the response to the caches and return the response
await cache.put(e.request,res.clone())
return res;
}else{
const res = cache.match(e.request)
return res
}
})
})
谁能看出这是为什么?
解决方法
如@Ouruborus 所述,您只传递函数引用而不是函数结果。比较这两个例子
console.log(() => { return 'test' });
对比
console.log((() => { return 'test' })());
如果你像这样重写你的代码,它应该可以工作:
self.addEventListener('fetch',(e) => {
e.respondWith((async () => {
const res = await fetch(e.request);
const cache = await caches.open(cacheName)
if (res.ok) {
// add the response to the caches and return the response
await cache.put(e.request,res.clone())
return res;
} else {
const res = cache.match(e.request)
return res
}
})());
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。