async/await
構文を使用している間、私はサービスワーカーの約束に苦しんでいます。
状況:私はプッシュ通知を受け取り、クリックイベントを処理したい。もし私がthen
とcatch
で "古い"構文を使用すると、クライアントのリストに対してiteratoreを実行して何かを行うことができます。 async/await
と私の好みの方法を使用すれば、何もしません。 @Criceと@Keithへサービスワーカー:waituntilとの組み合わせで非同期待機が正しく動作していません
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);
});
});
'waitUntil'のように見えるのは、関数ではなく、関数であるためです。非同期関数をすぐに呼び出すと、うまくいくかもしれません。 'event.waitUntil((async()=> {...})())' – CRice
@CRiceは正しいです。ここに関数を渡すのは約束ではありません。あなたはIIFのやり方をすることができますが、もっと分かりやすい方法は、あなたの非同期のものをすべて持っている 'getClients'という関数を作り、' event.waitUntil(getClients()); ' – Keith
@CRiceと@Keith ありがとうございました。あなたはまったく正しい。私はいくつかのものを混ぜた... 私はそれが約束を返すことを知っていたので、私はまた、 "外部"非同期関数を使用しようとしました。しかし、実際には私はそれを呼び出す代わりに参照を渡しただけです( 'waitUntil(getClients)' vs 'waitUntil(getClients())' – dkirchhof