Antecedentes: tengo una aplicación web Firebase que se carga y funciona perfectamente sin conexión (es decir, en modo avión) y en línea con una buena conexión. El problema son las conexiones muy débiles donde navigator.onLine es verdadero, pero la conexión es básicamente inutilizable. La aplicación se cuelga hasta que enciendo el modo avión. De acuerdo con los documentos del SDK de Firebase, no parece haber un método para initializeApp() sin conexión. Tengo habilitada la persistencia fuera de línea de Firestore y funciona muy bien una vez que se carga la aplicación.
Objetivo: usar el trabajador del servicio para bloquear las solicitudes de recuperación de la red durante aproximadamente 2 segundos devolviendo un error para "engañar" a Firebase para que piense que el dispositivo está desconectado y se carga al instante, luego desbloquea/permite todas las futuras solicitudes de recuperación como de costumbre
El problema: el código que encontré e implementé a continuación funciona muy bien inicialmente y la aplicación ahora se carga instantáneamente en todas las condiciones de la red, pero como Firebase intenta nuevamente cada 10 segundos para realizar solicitudes de búsqueda, el trabajador del servicio continúa para interceptarlos, lo cual no hago. no quiero
¿Cómo hago para que el siguiente código se ejecute una sola vez en un trabajador de servicio en la carga inicial?
addEventListener("fetch", (event) => { event.respondWith( (async function () { console.log("blocking"); event.request.url.startsWith("https://") ? Response.error() : fetch(event.request); return setTimeout(() => { console.log("unblocked"); fetch(event.request); }, 3000); })() ); });