Errori, timeout e tentativi
Come leggere cosa restituisce invoke quando qualcosa va storto e quando puoi richiamare in sicurezza.
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:
| Campo | Significato |
|---|---|
error.status | Stato HTTP. 0 significa che l'errore si è verificato sul client (nessuna risposta). |
error.code | Identificatore stabile, ad esempio NOT_FOUND, QUOTA_EXCEEDED, timeout, invalid_body. |
error.message | Il testo restituito dalla funzione o la spiegazione della piattaforma. |
error.context | Su un FunctionsHttpError: il corpo restituito dalla funzione (JSON o testo analizzato). |
error.details | Il corpo dell'errore non elaborato. Per un errore della piattaforma contiene error.request_id. |
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 è successo | Classe | status | code | message |
|---|---|---|---|---|
| La funzione non esiste | FunctionsHttpError | 404 | NOT_FOUND | "...Funzione 'no' introvabile" |
La tua funzione restituisce 500 con testo | FunctionsHttpError | 500 | http_500 | quel testo |
La tua funzione restituisce 503 stessa | FunctionsHttpError | 503 | http_503 | quello che hai restituito |
| La tua funzione lancia | FunctionsHttpError | 500 | http_500 | "Errore interno del server" |
La tua funzione supera il suo timeout_secs | FunctionsHttpError | 500 o 503 | http_500 / http_503 | "Esecuzione della funzione non riuscita" o "La funzione ha restituito HTTP 503" |
| Il runtime non è raggiungibile | FunctionsRelayError | 503 | SERVICE_UNAVAILABLE | spiega che la funzione non è stata eseguita |
| La rete fallisce prima di qualsiasi risposta | FunctionsRelayError | 0 | network_error | l'errore di rete |
| Quota del piano esaurita | FunctionsHttpError | 403 | QUOTA_EXCEEDED | il messaggio di quota |
| Troppe chiamate da un cliente | FunctionsHttpError | 429 | rate_limit_exceeded | attendere il messaggio |
| Richiedi corpo troppo grande | FunctionsRelayError | 503 | SERVICE_UNAVAILABLE | "dimensione massima del carico utile superata" |
Hai annullato o il tuo timeout è scaduto | AuraError | 0 | timeout | "Richiamo della funzione interrotto o scaduto" |
| Il corpo non può essere inviato come JSON | AuraError | 0 | invalid_body | nomina il tipo da evitare |
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.
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.
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.
| Fallimento | La funzione è stata eseguita? | È sicuro riprovare? |
|---|---|---|
503 dalla piattaforma (FunctionsRelayError) | No, il runtime era irraggiungibile | Sì, con un breve back-off |
429 | No | Sì, dopo il ritardo in error.retryAfter |
403 QUOTA_EXCEEDED | No | No, finché la quota non viene reimpostata o non si cambia piano |
status 0 (network_error) | Sconosciuto | Solo se la tua funzione è idempotente |
timeout sul client | Sconosciuto | Solo se la tua funzione è idempotente |
FunctionsHttpError 5xx | Sì, parzialmente o completamente | Solo se la tua funzione è idempotente |
FunctionsHttpError 4xx | Sì | No: correggi la richiesta |
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.
4. Timeout
Tre orologi funzionano contemporaneamente:
| Orologio | Predefinito | Dove cambiarlo |
|---|---|---|
| Il tuo cliente | 30 s per ogni responseType | invoke(…, { timeout }), { signal } o requestTimeoutMs nelle opzioni client |
| La funzione | 30 s, tra 1 e 300 | permissions.timeout_secs sulla funzione |
| La porta | 380 s | non 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.
Per lavori che durano più di qualche secondo, accoda un lavoro invece di tenere aperta una connessione.
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 conconsole.logoconsole.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
headerse accedi.