Este tópico apresenta respostas para perguntas frequentes sobre o método waitUntil do EdgeRoutine (ER).
Por que uma solicitação fetch falha ocasionalmente?
Uma solicitação fetch pode falhar devido às seguintes causas:
Ciclo de vida do contexto
Quando você chama o método
addEventListenerpara registrar uma função de callback, o contexto é criado automaticamente. Após a leitura do objeto Response, incluindo o cabeçalho e o corpo da resposta retornados pelo métodoevent.respondWith, o contexto é encerrado.O ciclo de vida de todas as funções assíncronas está incluído no ciclo de vida dos contextos. Uma função assíncrona aguarda a execução do objeto Promise até que ele seja resolvido. Se você não quiser que as funções assíncronas aguardem a execução do objeto Promise, chame o método event.waitUntil. Esse método estende o ciclo de vida de um contexto até que todos os objetos Promise passados para o método waitUntil sejam executados.
Compartilhamento de estados entre contextos
Não é possível compartilhar estados entre contextos. Dados que não estejam em estruturas padrão do JavaScript não podem ser compartilhados entre contextos. Por exemplo, não é possível compartilhar dados na estrutura da Service Worker API ou objetos Stream entre contextos. Se o Contexto A utilizar um objeto que não pertence ao Contexto A, o ER detecta o objeto e lança uma exceção.
NotaÉ possível utilizar objetos nativos do JavaScript, como String, Array, Object e Number, ou classes personalizadas, para compartilhar estados.
Objetos Promise concorrentes
Objetos Promise que não são aguardados pelas funções são concorrentes. Para que o ER responda aos navegadores imediatamente após receber as solicitações, sem aguardar sub-solicitações, chame o método waitUntil para garantir que os programas sejam executados conforme esperado.
Exceções lançadas por funções assíncronas
Se uma sub-solicitação em uma instrução waitUntil lançar uma exceção, o contexto é encerrado.
É possível chamar o método waitUntil várias vezes?
É possível chamar o método waitUntil várias vezes ou aninhar um método waitUntil dentro de outro. Dessa forma, quando o objeto Promise retornado por um dos métodos waitUntil é resolvido, você pode continuar chamando o método waitUntil na função de callback.
Os contextos têm um tempo de resposta específico. Se o tempo de resposta expirar, o contexto é encerrado.