10

async/await在使用语法时,我正在为服务工作者的承诺而苦苦挣扎。
以下情况:我收到了推送通知并想处理点击事件。如果我使用“旧”语法,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);
  });
});
4

2 回答 2

6

感谢@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);
}
于 2017-11-16T00:53:48.797 回答
1

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

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

添加的 ( ) 将立即调用 async 函数,因此名称为 async IIFE

于 2021-11-25T00:00:40.167 回答