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));
// ????????????????????^?????????????????????????^


以上是JavaScript如何使用event.waitUntil()等待异步函数调用的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>