2017-11-14 4 views
0

waitUntilrespondWith(それ自体はfetchイベント内)内に使用する必要がありますか? respondWithは既にwaitUntilに解決された約束を受けていませんか?フェッチイベントでrespondWithとwaitUntilの両方を使用する

本のいくつかの議論は、両方が使用されている次の簡単な例が与えられているhere、次のとおりです。

addEventListener('fetch', event => { 
    event.respondWith(
    fetch(whatever).then(response => { 
     event.waitUntil(addThisToTheCache(response)); 
     return response; 
    }) 
); 
}); 

をしかし、これはwaitUntilなしで書き込むことができませんでしたか?次のように:

addEventListener('fetch', event => { 
    event.respondWith(
    fetch(whatever).then(response => { 
     return addThisToTheCache(response).then(() => { 
     return response; 
     }); 
    }) 
); 
}); 
+0

'then()'の中で 'return'ステートメントで何を達成しようとしていますか? –

+0

約束事(応答あり)を 'event.respondWith()'に戻す – drmrbrewer

+0

'Promise'の代わりに' value'を返しています。どういう仕組みか分かりません –

答えて

7

これは、2秒で応答を表示するブラウザ処理&を遅らせます:

addEventListener('fetch', event => { 
    event.respondWith(async function() { 
    const response = await fetch(event.request); 
    await processResponseForTwoSeconds(response); 
    return response; 
    }()); 
}); 

これません。

addEventListener('fetch', event => { 
    event.respondWith(async function() { 
    const response = await fetch(event.request); 
    event.waitUntil(processResponseForTwoSeconds(response)); 
    return response; 
    }()); 
}); 

waitUntilは、滞在するサービスワーカーに伝えます進行中のタスクに対しては生きていますが、応答を遅らせることはありません。

+0

いつものようにうまくできています。 'addThisToTheCache()'の代わりに 'processResponseForTwoSeconds()'を使うことで、あなたが誇張しているように誇張しているのが好きです。 :-)実際には、典型的な 'addThisToTheCache()'関数は非常に長い間物事を遅らせる可能性は低いので、 'waitUntil()'を使うのが最適ですが、 'await'を使うことはそれほど遅くはない災害)?とにかく、コードを再訪して、どこを最適化すべきか見てみましょう。急な学習曲線。 – drmrbrewer

+3

私は通常、物事を遅らせる可能性が高いと言いたいと思います。ブラウザは、ヘッダーが到着するとすぐに文書として応答を処理できます。ドキュメント全体が取得される前にレンダリングを開始することもできます。応答全体がキャッシュされるまで遅らせることで、かなり遅くなっています。 –

関連する問題