JavaScript如何使用event.waitUntil()等待异步函数调用
在学习 JavaScript 时,它推荐使用async/await因为它比 更易读.then,我同意。不幸的是,当谈到 PWA 服务人员时,async似乎被遗忘了。
尝试为具有异步样式的 Service Worker 创建安装函数时:
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接受一个promise,而不是一个函数。一个async功能是不是一个承诺,那就是一个函数返回一个承诺。
调用您的函数并将它返回的承诺传递给waitUntil:
event.waitUntil(install(cacheVersion, cacheAssets));
// ????????????????????^?????????????????????????^
THE END
二维码