Подтвердить что ты не робот

Что делает event.waitUntil в обслуживании и зачем он нужен?

MDN предлагает сделать следующее, чтобы создать и заполнить кеш сервис-работника:

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

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

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

Я не понимаю, что:

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

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

4b9b3361

Ответ 1

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

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

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

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