Ночные Работники Службы | Интерфейс ExtendableEvent

Ночные Работники Службы | Интерфейс ExtendableEvent

[Exposed=ServiceWorker]
interface ExtendableEvent : Event {
  constructor(DOMString type, optional ExtendableEventInit eventInitDict = {});
  undefined waitUntil(Promise<any> f);
};

 

dictionary ExtendableEventInit : EventInit {
  // Определён для прямой совместимости между производными событиями
};

 

С объектом ExtendableEvent связаны обещания продления срока действия (extend lifetime promises — массив обещаний). Изначально это пустой массив.

Объект ExtendableEvent имеет связанный счетчик ожидающих обещаний (pending promises count — количество ожидающих обещаний в обещаниях продления срока действия). Первоначально он установлен на ноль (zero).

У объекта ExtendableEvent есть связанный флаг тайм-аута (timed out flag). Он изначально не установлен и устанавливается после необязательной задержки, наложенной пользовательским агентом, если счётчик ожидающих обещаний больше нуля (zero).

Говорят, что объект ExtendableEvent активен (active), если его флаг тайм-аута не установлен и либо его количество ожидающих обещаний больше нуля (zero), либо установлен флаг отправки.

У работника службы есть два события жизненного цикла: install (установка) и activate (активация). Работники службы используют интерфейс ExtendableEvent для события активации activate и события установки install.

Расширения работника службы, которые определяют обработчики событий, также могут использовать или расширять интерфейс ExtendableEvent.

 

4.4.1. Метод event.waitUntil(f)

Примечание

Метод waitUntil() продлевает время жизни события.

Шаги метода waitUntil(f) добавляют обещание времени жизни f к этому this.

Чтобы добавить обещание срока действия promise (add lifetime promiseобещание) к событию event (ExtendableEvent), выполните следующие действия:

1. Если атрибут isTrusted события event имеет значение false, выбросить исключение "InvalidStateError" DOMException.
2. Если событие event неактивно, выбросить исключение "InvalidStateError" DOMException.
Примечание

Если обещание продления срока жизни не было добавлено в задачу, которая вызвала обработчики событий, вызов waitUntil() в последующих асинхронных задачах будет сгенерирован.

3. Добавьте обещание promise к обещаниям продления срока действия события event.
4. Количество ожидающих обещаний события event учитываются на один.
Примечание

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

5. После выполнения или отклонения обещания promise поставьте в очередь микрозадачу для выполнения следующих подшагов:
  5.1 Количество ожидающих обещаний события event уменьшаются на единицу.
  5.2 Если Количество ожидающих обещаний события event равно 0, то:
    5.2.1 Пусть registration будет текущим глобальным объектом связанного содержащего регистрацию работника службы, работника службы.
    5.2.2 Если registration не зарегистрирована, активируйте "Попытку Очистки Регистрации" (Try Clear Registration) с регистрацией registration.
    5.2.3 Если registration не является null, вызовите "Пробную Активацию" (Try Activate) с регистрацией registration.

 

Пользовательский агент не должен завершать работника службы, если У Работника Службы Нет Ожидающих Событий, возвращается false для этого работника службы.

 

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

 

Примечание

Работники службы откладывают обработку устанавливающего работника как «installed» до тех пор, пока все обещания в обещаниях продления срока жизни события установки install не будут успешно разрешены.

(См. Соответствующий шаг алгоритма установки.) Если какое-либо из обещаний отклоняется, установка не выполняется. Это в первую очередь используется для того, чтобы работник службы не считался «installed» до тех пор, пока не будут заполнены все основные кэши, от которых он зависит.

Точно так же работники службы откладывают рассмотрение активного работника как «activated» до тех пор, пока не будут выполнены все обещания в обещаниях продления срока действия события активации activate. (См. Соответствующий шаг алгоритма активации.) Это в основном используется для того, чтобы гарантировать, что какие-либо функциональные события не отправляются работнику службы, пока он не обновит схемы базы данных и не удалит устаревшие записи кэша.

 

 

Информационные ссылки

Стандарт Service Workers Nightlyhttps://w3c.github.io/ServiceWorker/#extendableevent-interface