在fetch事件中使用respondWith和waitUntil

drm*_*wer 1 javascript service-worker fetch-api

是否有必要使用waitUntil内部a respondWith(本身在fetch事件中)?不respondWith已经waitUntil接收到一个解决的承诺?

这里有一些讨论,其中给出了以下简单示例,其中使用了两个:

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

但是没有这个可以写waitUntil吗?如下:

addEventListener('fetch', event => {
  event.respondWith(
    fetch(whatever).then(response => {
      return addThisToTheCache(response).then(() => {
        return response;
      });
    })
  );
});
Run Code Online (Sandbox Code Playgroud)

Jaf*_*ake 12

这将延迟浏览器处理和显示响应两秒钟:

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

这不会:

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

waitUntil 告诉服务工作者为正在进行的任务保持活力,但不会延迟响应.

  • 我会说它通常可能会拖延事情.一旦标题到达,浏览器就可以将响应作为文档处理.它甚至可以在整个文档被提取之前开始呈现它.通过延迟,直到整个响应被缓存,你的速度相当慢. (3认同)