服务工作进程:异步等待与等待无法正常工作



>我在使用async/await语法时正在努力解决服务工作者的承诺。
以下情况:我收到推送通知,想要处理点击事件。如果我将"旧"语法与then一起使用,catch我可以迭代客户端列表并对其进行处理。如果我使用我喜欢的方式async/await它不会做任何事情。

self.addEventListener("notificationclick", event => {
  // is working
  event.waitUntil(self.clients.matchAll().then(clientList => {
    console.log(clientList);
  }));
  // is not working
  event.waitUntil(async () => {
    const clientList = await self.clients.matchAll();
    console.log(clientList);
  });
});

感谢@Crice和@Keith,

waittill 需要一个承诺作为参数而不是函数。所以这是异步/等待风格的工作示例:

self.addEventListener("notificationclick", event =>
{
    event.waitUntil(getClients());
});
async function getClients()
{
    const clientList = await self.clients.matchAll();
    console.log(clientList);
}

您可以修改原始代码以将异步 IIFE 设为

  // should be working now
  event.waitUntil( (async () => {
    const clientList = await self.clients.matchAll();
    console.log(clientList);
  })() );

添加的 ( ( 将立即调用异步函数,因此称为异步 IIFE

最新更新