Respuestas a las preguntas más comunes sobre el método waitUntil en EdgeRoutine (ER).
¿Por qué falla ocasionalmente una solicitud fetch?
Una solicitud fetch puede fallar por las siguientes razones:
-
Ciclo de vida del contexto
Cuando se llama a
addEventListenerpara registrar una función callback de evento, se crea automáticamente un contexto. Este contexto finaliza después de que se lee por completo el objeto Response devuelto porevent.respondWith, lo cual incluye el encabezado y el cuerpo.Todas las funciones asíncronas comparten el ciclo de vida de su contexto. Una función asíncrona espera la ejecución del objeto Promise hasta que este se resuelve. Para evitar que las funciones asíncronas se bloqueen en un Promise, llame al método event.waitUntil. Este método extiende el ciclo de vida del contexto hasta que se ejecutan todos los objetos Promise pasados a waitUntil.
-
Estados compartidos entre contextos
Los contextos están aislados y no pueden compartir estado. Las estructuras de datos de JavaScript no estándar, como los objetos de la API de Service Worker o los objetos
Stream, no se pueden compartir entre contextos. Si un contexto intenta usar un objeto que pertenece a otro, EdgeRoutine lo detecta y lanza una excepción.NotaPara compartir estado entre contextos, utilice objetos nativos de JavaScript, como String, Array, Object y Number, o bien clases personalizadas.
-
Objetos Promise concurrentes
Los objetos Promise que no se esperan son concurrentes. Para que ER responda de inmediato a los navegadores sin esperar las subsolicitudes, llame al método waitUntil y asegúrese de que su programa se ejecute correctamente.
-
Excepciones lanzadas por funciones asíncronas
Si una subsolicitud dentro de una instrucción waitUntil lanza una excepción, el contexto finaliza.
¿Se puede llamar varias veces al método waitUntil?
Puede llamar a waitUntil varias veces e incluso anidar llamadas a waitUntil. Por ejemplo, cuando un Promise pasado a waitUntil se resuelve, puede volver a llamar a waitUntil dentro de la función callback de ese Promise.
Cada contexto tiene un límite de tiempo. Si un contexto supera este límite, se termina de forma forzosa.