Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

214
Views
¿Debo devolver una promesa en una función de devolución de llamada onFetch de JS Service Worker si no quiero hacer nada con la solicitud original?

Mi escenario es el siguiente:

  1. Tengo una aplicación web progresiva que usa un Service Worker donde necesito capturar la solicitud y hacer algo con ella cada vez que el usuario solicita un recurso o deja la URL actual
  2. Estoy manejando eso agregando una devolución de llamada al evento de búsqueda del trabajador
  3. Solo me importan los recursos solicitados dentro de nuestro dominio (por ejemplo, example.com)
  4. Si el recurso solicitado está dentro de nuestro dominio, devuelvo el resultado de la promesa de una fetch regular, por lo que ya está cubierto
  5. Pero, si el recurso solicitado está fuera de mi dominio (como se muestra en el fragmento a continuación) , quiero que la solicitud original continúe.
  6. Actualmente solo estoy haciendo una return simple si el escenario en la viñeta 5 es verdadero

Fragmento 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!

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

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.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!