javascript - 在 respondWith 中使用异步函数
问题描述
我在'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
还接受一个promise,如果你不使用 await
它,你会得到这个。
所以是的,不使用await
是去这里的方法。
资料来源:
推荐阅读
- django - Django 使用单个模型创建嵌套 json
- php - Symfony - 在 onKernelRequest 中使用 twig 会杀死会话
- list - SliverChildBuilderDelegate - 反向方法
- typescript - Flowtype中Typescript的“EnumType中的键”相当于什么?
- python - Django 2.2.1 的 runserver 给出循环导入错误而不是显示实际错误
- bash - 为什么“\\\\”在zsh中等于“\\”?
- javascript - Google App Engine CORS“解析 ./app.yaml 时出错:未知 url 处理程序类型”
- angular - Selenium Chrome 驱动程序在junit中具有断点和没有断点的不同行为
- python - 将所选文本读入 Python 函数而不更改剪贴板,甚至不更改多剪贴板
- javascript - Highcharts 同步无法水平工作