>我在使用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