Aura Logo
aurabasedocumentos
documentos›Edge Functions›Errors, timeouts and retries

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.

9 min lido·Nível intermediário·Revisado em 12 de out. de 2026
Este texto em inglês foi gerado automaticamente a partir do original em francês e ainda não foi revisado.
Esta página foi traduzida automaticamente. A versão em inglês é oficial.
#
Anatomia

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:

classify.tstypescript
import { FunctionsHttpError, FunctionsRelayError } from '@aurabase/aurabase-js'

const { data, error } = await aura.functions.invoke('checkout', { body })

if (error instanceof FunctionsHttpError) {
  // Sua função respondeu, com status de erro. Depure seu código.
} else if (error instanceof FunctionsRelayError) {
  // A plataforma falhou: a resposta da sua função nunca mais voltou.
} else if (error) {
  // A chamada foi cancelada ou recusada no cliente (timeout, invalid_body, no_session).
}
CampoSignificado
error.statusEstado HTTP. 0 significa que a falha ocorreu no cliente (sem resposta).
error.codeIdentificador estável, por exemplo NOT_FOUND, QUOTA_EXCEEDED, timeout, invalid_body.
error.messageO texto que sua função retornou ou a explicação da plataforma.
error.contextEm um FunctionsHttpError: o corpo que sua função retornou (JSON ou texto analisado).
error.detailsO corpo do erro bruto. Para um erro de plataforma contém error.request_id.
#
Diagnóstico

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 aconteceuClassestatuscodemessage
A função não existeFunctionsHttpError404NOT_FOUND"…Função 'não' introuvível"
Sua função retorna 500 com textoFunctionsHttpError500http_500aquele texto
Sua função retorna o próprio 503FunctionsHttpError503http_503o que você devolveu
Sua função lançaFunctionsHttpError500http_500"Erro interno do servidor"
Sua função excede seu timeout_secsFunctionsHttpError500 ou 503http_500 / http_503"Falha na execução da função" ou "Função retornou HTTP 503"
O tempo de execução está inacessívelFunctionsRelayError503SERVICE_UNAVAILABLEexplica que a função foi e não executada
A rede falha antes de qualquer respostaFunctionsRelayError0network_erroro erro de rede
Cota do plano esgotadaFunctionsHttpError403QUOTA_EXCEEDEDa mensagem de cota
Muitas chamadas de um clienteFunctionsHttpError429rate_limit_exceededmensagem de espera
Corpo da solicitação muito grandeFunctionsRelayError503SERVICE_UNAVAILABLE"tamanho máximo da carga útil excedido"
Você cancelou ou seu timeout expirouAuraError0timeout"Invocação de função abortada ou expirada"
O corpo não pode ser enviado como JSONAuraError0invalid_bodynomeia o tipo a ser evitado
Um 503 da sua função não é uma falha de plataforma

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.

Duas falhas parecem outra coisa

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.

#
Tentar novamente

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.

FalhaA função foi executada?É seguro tentar novamente?
503 da plataforma (FunctionsRelayError)Não, o tempo de execução estava inacessívelSim, com um breve recuo
429NãoSim, após o atraso em error.retryAfter
403 QUOTA_EXCEEDEDNãoNão, até que a cota seja redefinida ou você mude de plano
status 0 (network_error)DesconhecidoSomente se sua função for idempotente
timeout no clienteDesconhecidoSomente se sua função for idempotente
FunctionsHttpError 5xxSim, parcial ou totalmenteSomente se sua função for idempotente
FunctionsHttpError 4xxSimNão: corrija a solicitação
retry.tstypescript
import { FunctionsRelayError } from '@aurabase/aurabase-js'

async function invokeWithRetry(name: string, body: unknown, attempts = 3) {
  for (let i = 0; i < attempts; i++) {
    const res = await aura.functions.invoke(name, { body })
    const safe = res.error instanceof FunctionsRelayError && res.error.status === 503
    if (!res.error || !safe) return res
    await new Promise((r) => setTimeout(r, 2 ** i * 500))
  }
  return aura.functions.invoke(name, { body })
}
Torne a função idempotente

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.

#
Hora

4. Tempos limite

Três relógios funcionam ao mesmo tempo:

RelógioPadrãoOnde mudar isso
Seu cliente30 s para cada responseTypeinvoke(…, { timeout }), { signal } ou requestTimeoutMs nas opções do cliente
A função30 s, entre 1 e 300permissions.timeout_secs na função
A porta de entrada380 snã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.

timeout.tstypescript
const { error } = await aura.functions.invoke('report', { timeout: 35_000 })
if (error?.code === 'timeout') {
  // Cancelado pelo seu cliente. A função ainda pode estar em execução.
}

Para trabalhos que duram mais de alguns segundos, enfileira uma tarefa em vez de manter uma conexão aberta.

#
Depurar

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 com console.log ou console.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 headers e registre-o.
Última atualização · 12 de out. de 2026