Mi escenario es el siguiente:
fetch regular, por lo que ya está cubiertoreturn simple si el escenario en la viñeta 5 es verdaderoFragmento de mi código actual:
function onFetch(event) { if (!event.request.url.startsWith("example.com")) { return; } else { event.respondWith( fetch(event.request) .then(req => { // doing something with the request }) .catch((error)=> { // handle errors etc. }) .finally(()=> { // cleanup }) ); } } self.addEventListener('fetch', onFetch);Mi pregunta: ¿Está bien si simplemente no devuelvo nada como en el fragmento, o necesito devolver algo específico, como una nueva promesa al obtener la solicitud original (como lo estoy haciendo en el bloque else) ?
¡Gracias!
Está absolutamente bien hacer lo que estás haciendo. No llamar a event.respondWith() es una señal para el navegador de que un controlador de fetch dado no va a generar una respuesta a una solicitud dada, y puede estructurar su código para que return temprano para evitar llamar a event.respondWith() .
Es posible que tenga varios controladores de fetch registrados, y si el primero regresa sin llamar a event.respondWith() , el siguiente controlador de fetch tendrá la oportunidad de responder. Si todos los controladores de fetch se han ejecutado y ninguno de ellos llama a event.respondWith() , el navegador manejará automáticamente la solicitud como si no hubiera ningún trabajador de servicio, que es lo que desea.
En términos del comportamiento observado, no llamar a event.respondWith() termina pareciéndose a lo que sucedería si llamas a event.respondWith(event.request) . Pero hay una sobrecarga involucrada en hacer una solicitud fetch() dentro de un trabajador de servicio y luego pasar el cuerpo de la respuesta del subproceso del trabajador de servicio al programa principal, y evita esa sobrecarga si no llama a event.respondWith() . Por lo tanto, recomendaría el enfoque que está tomando.