Какое событие.waitUntil do в сервисном работнике и зачем это нужно?

MDN предлагает сделать следующее Для создания и заполнения кэша service worker:

this.addEventListener('install', function(event) {
  event.waitUntil(
    caches.open('v1').then(function(cache) {
      return cache.addAll([
        '/sw-test/',
        '/sw-test/index.html',
        ... etc ...
      ]);
    })
  );
});

Я не понимаю этот код. The waitUntil метод также документирован, и кажется, что приведенный выше код является единственной целью его существования на данный момент:

ExtendableEvent.метод waitUntil () продлевает срок службы событие. При вызове EventHandler, связанного с событием установки, он задерживает обрабатывать устанавливая работника как установлено, пока не будет пройдена Обещание успешно разрешается. Это в первую очередь используется для обеспечения service worker не считается установленным, пока не будет установлено все ядро кэши, от которых он зависит, заполнены.

чего я не понимаю, так это:

  • как waitUntil обычно влияют на поток кода? Останавливает ли оно распространение событий, пока не разрешится обещание?
  • почему это необходимо в контексте открытия worker кэш?

Я задаю этот вопрос, потому что у меня проблемы с кодом выше, и я хотел бы его понять.

1 ответов


как говорится в описании,the ExtendableEvent.waitUntil() method extends the lifetime of the event. Если вы не вызываете его внутри метода, работник службы может быть остановлен в любое время (см. спецификация).

Итак,waitUntil метод используется, чтобы сказать браузеру не прекращать работу службы, пока обещание не передано waitUntil либо разрешен, либо отклонен.

о ваших конкретных вопросах:

  • в случае install и activate события, это задерживает состояние переключение сервисного работника на installed и activated (см. спецификация метода waitUntil, в частности последняя часть абзаца).
  • я думаю, что остальная часть моего ответа уже ответила, Почему это необходимо.