Logo Aurabase
aurabasedocumenti
documenti›Edge Functions›Errors, timeouts and retries

Errori, timeout e tentativi

Come leggere cosa restituisce invoke quando qualcosa va storto e quando puoi richiamare in sicurezza.

9 min letto·Livello intermedio·Revisionato il 12 ott 2026
Questo testo inglese è stato generato automaticamente dall'originale francese e non è stato ancora rivisto.
Questa pagina è stata tradotta automaticamente. Fa fede la versione inglese.
#
Anatomia

1. L'oggetto errore

invoke restituisce { data, error } e non genera mai un'eccezione. error è un AuraError, quindi isAuraError(error) è vero. Due sottoclassi ti dicono chi ha fallito:

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

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

if (error instanceof FunctionsHttpError) {
  // La tua funzione ha risposto, con uno stato di errore. Esegui il debug del tuo codice.
} else if (error instanceof FunctionsRelayError) {
  // La piattaforma ha fallito: la risposta della tua funzione non è mai arrivata.
} else if (error) {
  // La chiamata è stata annullata o rifiutata sul client (timeout, invalid_body, no_session).
}
CampoSignificato
error.statusStato HTTP. 0 significa che l'errore si è verificato sul client (nessuna risposta).
error.codeIdentificatore stabile, ad esempio NOT_FOUND, QUOTA_EXCEEDED, timeout, invalid_body.
error.messageIl testo restituito dalla funzione o la spiegazione della piattaforma.
error.contextSu un FunctionsHttpError: il corpo restituito dalla funzione (JSON o testo analizzato).
error.detailsIl corpo dell'errore non elaborato. Per un errore della piattaforma contiene error.request_id.
#
Diagnosi

2. Di quale errore si tratta?

Comportamenti osservati rispetto a uno stack in esecuzione. La riga della quota segue la mappatura degli errori del backend e non è stata attivata nei nostri test.

Cosa è successoClassestatuscodemessage
La funzione non esisteFunctionsHttpError404NOT_FOUND"...Funzione 'no' introvabile"
La tua funzione restituisce 500 con testoFunctionsHttpError500http_500quel testo
La tua funzione restituisce 503 stessaFunctionsHttpError503http_503quello che hai restituito
La tua funzione lanciaFunctionsHttpError500http_500"Errore interno del server"
La tua funzione supera il suo timeout_secsFunctionsHttpError500 o 503http_500 / http_503"Esecuzione della funzione non riuscita" o "La funzione ha restituito HTTP 503"
Il runtime non è raggiungibileFunctionsRelayError503SERVICE_UNAVAILABLEspiega che la funzione non è stata eseguita
La rete fallisce prima di qualsiasi rispostaFunctionsRelayError0network_errorl'errore di rete
Quota del piano esauritaFunctionsHttpError403QUOTA_EXCEEDEDil messaggio di quota
Troppe chiamate da un clienteFunctionsHttpError429rate_limit_exceededattendere il messaggio
Richiedi corpo troppo grandeFunctionsRelayError503SERVICE_UNAVAILABLE"dimensione massima del carico utile superata"
Hai annullato o il tuo timeout è scadutoAuraError0timeout"Richiamo della funzione interrotto o scaduto"
Il corpo non può essere inviato come JSONAuraError0invalid_bodynomina il tipo da evitare
Un 503 dalla tua funzione non è un guasto della piattaforma

Se il tuo codice restituisce 502, 503 o 504, ottieni un FunctionsHttpError: la classe ti dice chi ha risposto, non qual è il numero di stato.

Due fallimenti sembrano qualcos'altro

Un corpo della richiesta superiore a circa 256 KiB viene rifiutato con 503 SERVICE_UNAVAILABLE e una risposta di circa 300 KB o più non è stata restituita entro il nostro test di 50 secondi. Vedi limiti. Riprovare non aiuta; inviare meno dati o utilizzare Spazio di archiviazione.

#
Riprova

3. Decidere se riprovare

L'SDK non riprova mai un'invocazione per te: la tua funzione potrebbe avere effetti collaterali e un POST ripetuto non è sicuro per impostazione predefinita. Decidi tu, utilizzando la tabella qui sotto.

FallimentoLa funzione è stata eseguita?È sicuro riprovare?
503 dalla piattaforma (FunctionsRelayError)No, il runtime era irraggiungibileSì, con un breve back-off
429NoSì, dopo il ritardo in error.retryAfter
403 QUOTA_EXCEEDEDNoNo, finché la quota non viene reimpostata o non si cambia piano
status 0 (network_error)SconosciutoSolo se la tua funzione è idempotente
timeout sul clientSconosciutoSolo se la tua funzione è idempotente
FunctionsHttpError 5xxSì, parzialmente o completamenteSolo se la tua funzione è idempotente
FunctionsHttpError 4xxSìNo: correggi la richiesta
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 })
}
Rendi invece la funzione idempotente

La piattaforma non deduplica le chiamate e ignora Idempotency-Key. Per i pagamenti o la posta elettronica, memorizza una chiave che passi in body e controllala all'avvio della funzione.

#
Tempo

4. Timeout

Tre orologi funzionano contemporaneamente:

OrologioPredefinitoDove cambiarlo
Il tuo cliente30 s per ogni responseTypeinvoke(…, { timeout }), { signal } o requestTimeoutMs nelle opzioni client
La funzione30 s, tra 1 e 300permissions.timeout_secs sulla funzione
La porta380 snon configurabile dai progetti

Quando la funzione supera timeout_secs, il runtime la annulla e la chiamata fallisce dopo circa quel ritardo, con il 500 o 503 mostrato sopra. La causa viene visualizzata in error.context.detail (WorkerRequestCancelled: request has been cancelled by supervisor) in modalità raw. Imposta il tuo client timeout leggermente sopra timeout_secs della funzione per visualizzare questo errore invece di un client timeout.

timeout.tstypescript
const { error } = await aura.functions.invoke('report', { timeout: 35_000 })
if (error?.code === 'timeout') {
  // Annullato dal tuo cliente. La funzione potrebbe essere ancora in esecuzione.
}

Per lavori che durano più di qualche secondo, accoda un lavoro invece di tenere aperta una connessione.

#
Debug

5. Trova la causa

  • Gli errori della piattaforma contengono un ID richiesta: error.details.error.request_id. Citalo quando contatti l'assistenza.
  • aura functions logs <name> elenca le richieste HTTP recenti con metodo, percorso, stato, durata e ID richiesta. non mostra ciò che la tua funzione ha scritto con console.log o console.error: quell'output rimane nei log del runtime, che solo l'operatore della piattaforma può leggere. Vedi limiti per questo e gli altri gap attuali.
  • L'identificativo della chiamata non viene inoltrato alla vostra funzione. Passa il tuo ID in headers e accedi.
Ultimo aggiornamento · 12 ott 2026