服务工作者:异步等待与waituntil一起工作不正常

时间:2017-11-15 23:30:40

标签: javascript push-notification async-await service-worker service-worker-events

我在使用async/await语法时挣扎于服务工作者的承诺 以下情况:我收到了推送通知,并希望处理点击事件。如果我使用" old"使用thencatch的语法我可以在客户端列表上进行迭代,并对其执行某些操作。如果我使用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);
  });
});

1 个答案:

答案 0 :(得分:3)

感谢@Crice和@Keith,

waitUntil需要一个promise作为参数而不是一个函数。所以这是async / await风格的工作示例:

self.addEventListener("notificationclick", event =>
{
    event.waitUntil(getClients());
});

async function getClients()
{
    const clientList = await self.clients.matchAll();
    console.log(clientList);
}