#javascript #service-worker
#язык JavaScript #работник сферы услуг
Вопрос:
Я добавляю прослушиватель событий выборки, подобный этому
self.addEventListener( 'fetch', fetch )
и вот моя функция извлечения
const fetch = e =gt; { console.log({e}) if ( !e.request.url.startsWith( self.location.origin ) || e.request.method !== 'GET' ) return const save = async res =gt; { const cache = await caches.open( dynamic ) cache.put( e.request, res ) } const process = async cached =gt; { if ( cached ) return cached const res = await fetch( e.request.clone() ) if ( res ) await save( res.clone() ) return res } e.respondWith( caches.match( e.request ).then( process )) }
Когда я смотрю на событие, которое передается, я ожидаю события выборки, но это то, что я вижу
Его печать объекта запроса после правильного события выборки. Когда я попытаюсь получить доступ к URL-адресу, он, конечно, выдаст ошибку, поскольку он будет эффективно выполнять запрос.request.url
Ответ №1:
В своем process
методе вы вызываете fetch
функцию с помощью клонированного запроса, который, вероятно Request
, вы видите в своей консоли.
const res = await fetch( e.request.clone() )
Эта проблема связана с тем , что вызывается ваш пользовательский метод fetch
, но в этом случае вы, вероятно, захотите использовать собственный fetch
метод. Возможно, вам следует подумать о переименовании вашего пользовательского метода, чтобы предотвратить подобные конфликты.
Комментарии:
1. ах, конечно, большое вам спасибо
2. Всегда пожалуйста 🙂 Пожалуйста, подумайте о том, чтобы проголосовать/принять мой ответ, если вы нашли его полезным 😀