如何解决在responseWith中使用异步功能
我有一个异步函数,用于在'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
是这里的方法。
来源:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。