问题描述
我有一个异步函数,用于在'fetch'eventListener中进行缓存,然后在'respondWith()'中以'await'调用此函数,但是它不起作用。
PS:当我不等待它的工作就叫它
self.addEventListener('fetch',async e => {
const req = e.request;
e.respondWith(await networkAndCache(req));
console.log('fetch');
});
,
async function networkAndCache(req) {
const cache = await caches.open(cacheName);
try {
const fresh = await fetch(req);
console.log('fresh');
await cache.put(req,fresh.clone());
console.log('put');
return fresh;
} catch (e) {
const cached = await cache.match(req);
console.log('cached');
return cached || caches.match(offlineUrl);;
}
}
解决方法
您必须同步呼叫respondWith
。如果您使用await
,则respondWith
将在事件处理过程之外的将来某个时间被调用。既然在外面,浏览器就认为处理事件不成功。
为了能够使用异步函数的结果,respondWith
还接受一个诺言,这是如果您不使用 await
所得到的
是的,不使用await
是这里的方法。
来源: