学习JavaScript时,建议您使用async
/,await
因为它比更具可读性.then
,我同意。不幸的是,当谈到PWA服务人员时,async
似乎已经被遗忘了。
尝试为服务工作者使用异步样式创建安装功能时:
const cacheVersion = "v1";
const cacheAssets = [
"/",
"/index.html",
"/static/img/logo.svg",
];
async function install(version, assets) {
const cache = await caches.open(version);
console.log("Doing stuff....");
}
self.addEventListener("install", (event) => {
console.log("Service Worker INSTALL START");
event.waitUntil(install, cacheVersion, cacheAssets); // <--- Does not call install()
console.log("Service Worker INSTALL COMPLETE");
});
该install
功能永远不会运行。如果我更改此行:
event.waitUntil(install, cacheVersion, cacheAssets);
至
install(cacheVersion, cacheAssets);
然后运行该行,但没有等待,从而导致问题。
如何使用它event.waitUntil
来调用异步函数并等待它?
对我event.waitUntil
来说就像await
,那么当JS中似乎没有其他功能时,为什么会有这个奇怪的特殊功能阻塞主循环呢?对我来说似乎很奇怪。
install
不会被调用是因为您不调用它。waitUntil
接受承诺,而不是功能。一个async
功能是不是一个承诺,那就是一个函数返回一个承诺。
调用函数并将其返回的promise传递给waitUntil
:
event.waitUntil(install(cacheVersion, cacheAssets));
// −−−−−−−−−−−−−−−−−−−−^−−−−−−−−−−−−−−−−−−−−−−−−−^
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句