在fetch事件中使用respondWith和waitUntil

时间:2017-11-14 09:37:54

标签: javascript service-worker fetch-api

是否有必要在waitUntil内使用respondWith(本身在fetch事件中)? 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;
      });
    })
  );
});

1 个答案:

答案 0 :(得分:10)

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

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告诉服务工作人员继续执行正在进行的任务,但不会延迟响应。