Вы звоните event.respondWith(...)
асинхронно, внутри promiseChain
.
Вам необходимо вызвать event.respondWith()
синхронно во время первоначального выполнения обработчика события fetch
. Это «сигнал» работнику службы поддержки о том, что ваш fetch
обработчик, а не другой зарегистрированный обработчик fetch
(или браузер по умолчанию), предоставит ответ на входящий запрос.
(Пока вы вызываете event.waitUntil(promiseChain)
синхронно во время первоначального выполнения, это на самом деле ничего не делает в отношении ответа на запрос - оно просто гарантирует, что работник службы не будет автоматически убит, пока promiseChain
выполнения.)
Делая шаг назад, я думаю, что вам, возможно, повезет больше, если вы используете workbox.backgroundSync.Plugin
вместе с workbox.routing.registerRoute()
, следуя примеру из документов :
workbox.routing.registerRoute(
/\/sf\/observation$/,
workbox.strategy.networkOnly({
plugins: [new workbox.backgroundSync.Plugin('deferredRequestsQueue')]
}),
'POST'
);
Это скажет Workbox перехватывать любые POST
запросы, которые соответствуют вашему RegExp, пытаться выполнить эти запросы с использованием сети, а в случае сбоя - автоматически ставить в очередь и повторять их через API фоновой синхронизации.