Erros, tempos limite e novas tentativas
Como ler o que invoke retorna quando algo dá errado e quando você pode ligar novamente com segurança.
1. O objeto de erro
invoke retorna { data, error } e nunca lança. error é um AuraError, então isAuraError(error) é verdadeiro. Duas subclasses informam quem falhou:
| Campo | Significado |
|---|---|
error.status | Estado HTTP. 0 significa que a falha ocorreu no cliente (sem resposta). |
error.code | Identificador estável, por exemplo NOT_FOUND, QUOTA_EXCEEDED, timeout, invalid_body. |
error.message | O texto que sua função retornou ou a explicação da plataforma. |
error.context | Em um FunctionsHttpError: o corpo que sua função retornou (JSON ou texto analisado). |
error.details | O corpo do erro bruto. Para um erro de plataforma contém error.request_id. |
2. Qual é o erro?
Comportamentos observados em uma pilha em execução. A linha de cota segue o mapeamento de erros do backend e não foi acionada em nossos testes.
| O que aconteceu | Classe | status | code | message |
|---|---|---|---|---|
| A função não existe | FunctionsHttpError | 404 | NOT_FOUND | "…Função 'não' introuvível" |
Sua função retorna 500 com texto | FunctionsHttpError | 500 | http_500 | aquele texto |
Sua função retorna o próprio 503 | FunctionsHttpError | 503 | http_503 | o que você devolveu |
| Sua função lança | FunctionsHttpError | 500 | http_500 | "Erro interno do servidor" |
Sua função excede seu timeout_secs | FunctionsHttpError | 500 ou 503 | http_500 / http_503 | "Falha na execução da função" ou "Função retornou HTTP 503" |
| O tempo de execução está inacessível | FunctionsRelayError | 503 | SERVICE_UNAVAILABLE | explica que a função foi e não executada |
| A rede falha antes de qualquer resposta | FunctionsRelayError | 0 | network_error | o erro de rede |
| Cota do plano esgotada | FunctionsHttpError | 403 | QUOTA_EXCEEDED | a mensagem de cota |
| Muitas chamadas de um cliente | FunctionsHttpError | 429 | rate_limit_exceeded | mensagem de espera |
| Corpo da solicitação muito grande | FunctionsRelayError | 503 | SERVICE_UNAVAILABLE | "tamanho máximo da carga útil excedido" |
Você cancelou ou seu timeout expirou | AuraError | 0 | timeout | "Invocação de função abortada ou expirada" |
| O corpo não pode ser enviado como JSON | AuraError | 0 | invalid_body | nomeia o tipo a ser evitado |
Se o seu próprio código retornar 502, 503 ou 504, você receberá um FunctionsHttpError: a classe informa quem respondeu, não qual é o número do status.
Um corpo de solicitação acima de cerca de 256 KiB é rejeitado com 503 SERVICE_UNAVAILABLE e uma resposta de cerca de 300 KB ou mais não retornou em nosso teste de 50 segundos. Consulte limites. Tentar novamente não ajuda; envie menos dados ou use o armazenamento.
3. Decida se deseja tentar novamente
O SDK nunca tenta novamente uma invocação para você: sua função pode ter efeitos colaterais e um POST repetido não é seguro por padrão. Você decide, usando a tabela abaixo.
| Falha | A função foi executada? | É seguro tentar novamente? |
|---|---|---|
503 da plataforma (FunctionsRelayError) | Não, o tempo de execução estava inacessível | Sim, com um breve recuo |
429 | Não | Sim, após o atraso em error.retryAfter |
403 QUOTA_EXCEEDED | Não | Não, até que a cota seja redefinida ou você mude de plano |
status 0 (network_error) | Desconhecido | Somente se sua função for idempotente |
timeout no cliente | Desconhecido | Somente se sua função for idempotente |
FunctionsHttpError 5xx | Sim, parcial ou totalmente | Somente se sua função for idempotente |
FunctionsHttpError 4xx | Sim | Não: corrija a solicitação |
A plataforma não desduplica chamadas e ignora Idempotency-Key. Para pagamentos ou e-mail, armazene uma chave que você passa em body e verifique no início da função.
4. Tempos limite
Três relógios funcionam ao mesmo tempo:
| Relógio | Padrão | Onde mudar isso |
|---|---|---|
| Seu cliente | 30 s para cada responseType | invoke(…, { timeout }), { signal } ou requestTimeoutMs nas opções do cliente |
| A função | 30 s, entre 1 e 300 | permissions.timeout_secs na função |
| A porta de entrada | 380 s | não configurável por projetos |
Quando a função excede timeout_secs, o tempo de execução a cancela e sua chamada falha após esse atraso, com 500 ou 503 mostrado acima. A causa aparece em error.context.detail (WorkerRequestCancelled: request has been cancelled by supervisor) no modo bruto. Defina seu cliente timeout um pouco acima do timeout_secs da função para ver esse erro em vez de um cliente timeout.
Para trabalhos que duram mais de alguns segundos, enfileira uma tarefa em vez de manter uma conexão aberta.
5. Encontre a causa
- Erros de plataforma carregam um ID de solicitação:
error.details.error.request_id. Cite-o quando entrar em contato com o suporte. aura functions logs <name>lista solicitações HTTP recentes com método, caminho, status, duração e ID da solicitação. não mostra o que sua função escreveu comconsole.logouconsole.error: essa saída permanece nos próprios logs do tempo de execução, que somente o operador da plataforma pode ler. Consulte limites para esta e outras lacunas atuais.- O identificador da chamada não é encaminhado para sua função. Passe seu próprio id em
headerse registre-o.