Что делает 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
обычно влияет на поток кода? Остановляет ли это событие распространение до тех пор, пока обещание не решит? - Почему это необходимо в контексте открытия кэша сотрудников?
Я задаю этот вопрос, потому что у меня проблемы с кодом выше, и я хотел бы это понять.
Ответы
Ответ 1
Как сказано в описании, the ExtendableEvent.waitUntil() method extends the lifetime of the event
. Если вы не вызываете его внутри метода, работник службы может быть остановлен в любое время (см. Спецификацию).
Таким образом, метод waitUntil
используется, чтобы сообщить обозревателю, чтобы он не waitUntil
обслуживающего работника до тех пор, пока обещание, переданное на waitUntil
будет разрешено или отклонено.
О ваших конкретных вопросах:
- В случае
install
и activate
событий он задерживает переключатель состояния рабочего рабочего для installed
и activated
(см. Спецификацию метода waitUntil, в частности последнюю часть абзаца). - Я думаю, что остальная часть моего ответа уже ответила, почему это необходимо.