Logo Aurabase
aurabazadokumenty
dokumenty›Edge Functions›Errors, timeouts and retries

Błędy, przekroczenia limitu czasu i ponowne próby

Jak odczytać, co zwraca invoke, gdy coś pójdzie nie tak i kiedy możesz bezpiecznie zadzwonić ponownie.

9 min przeczytane·Poziom mediator·Zmieniono 12 paź 2026
Ten tekst w języku angielskim został wygenerowany automatycznie na podstawie francuskiego oryginału i nie był jeszcze recenzowany.
Ta strona została przetłumaczona automatycznie. Wersja angielska jest miarodajna.
#
Anatomia

1. Obiekt błędu

invoke zwraca { data, error } i nigdy nie rzuca. error to AuraError, więc isAuraError(error) jest prawdą. Dwie podklasy informują , kto zawiódł:

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

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

if (error instanceof FunctionsHttpError) {
  // Twoja funkcja odpowiedziała ze statusem błędu. Debuguj swój kod.
} else if (error instanceof FunctionsRelayError) {
  // Platforma zawiodła: odpowiedź Twojej funkcji nigdy nie wróciła.
} else if (error) {
  // Połączenie zostało anulowane lub odrzucone przez klienta (timeout, valid_body, no_session).
}
PoleOznaczający
error.statusStan HTTP. 0 oznacza, że ​​na kliencie wystąpiła awaria (brak odpowiedzi).
error.codeStabilny identyfikator, na przykład NOT_FOUND, QUOTA_EXCEEDED, timeout, invalid_body.
error.messageTekst zwrócony przez funkcję lub wyjaśnienie platformy.
error.contextNa FunctionsHttpError: treść zwrócona przez funkcję (przeanalizowana JSON lub tekst).
error.detailsSurowa treść błędu. W przypadku błędu platformy zawiera error.request_id.
#
Diagnoza

2. Który to błąd?

Zachowania zaobserwowane w przypadku działającego stosu. Wiersz przydziału jest zgodny z mapowaniem błędów zaplecza i nie został wywołany w naszych testach.

Co się stałoKlasastatuscodemessage
Funkcja nie istniejeFunctionsHttpError404NOT_FOUND„…Funkcja „nie” niemożliwa do rozwiązania”
Twoja funkcja zwraca 500 z tekstemFunctionsHttpError500http_500ten tekst
Twoja funkcja zwraca samą wartość 503FunctionsHttpError503http_503co zwróciłeś
Twoja funkcja rzucaFunctionsHttpError500http_500„Wewnętrzny błąd serwera”
Twoja funkcja przekracza swój timeout_secsFunctionsHttpError500 lub 503http_500 / http_503„Wykonanie funkcji nie powiodło się” lub „Funkcja zwróciła HTTP 503”
Środowisko wykonawcze jest nieosiągalneFunctionsRelayError503SERVICE_UNAVAILABLEwyjaśnia, że ​​funkcja ta została uruchomiona , a nie
Sieć ulega awarii przed jakąkolwiek odpowiedziąFunctionsRelayError0network_errorbłąd sieci
Limit planu wyczerpanyFunctionsHttpError403QUOTA_EXCEEDEDkomunikat dotyczący limitu
Zbyt wiele połączeń od jednego klientaFunctionsHttpError429rate_limit_exceededczekaj na wiadomość
Żądanie jest zbyt dużeFunctionsRelayError503SERVICE_UNAVAILABLE„przekroczono maksymalny rozmiar ładunku”
Anulowałeś subskrypcję lub Twój timeout wygasłAuraError0timeout„Wywołanie funkcji zostało przerwane lub upłynął limit czasu”
Treści nie można wysłać w formacie JSONAuraError0invalid_bodynazywa typ, którego należy unikać
Kod 503 z Twojej funkcji nie oznacza awarii platformy

Jeśli Twój własny kod zwróci 502, 503 lub 504, otrzymasz FunctionsHttpError: klasa poinformuje Cię, kto odpowiedział, a nie jaki jest numer statusu.

Dwie porażki wyglądają jak coś innego

Treść żądania powyżej około 256 KiB jest odrzucana z 503 SERVICE_UNAVAILABLE, a odpowiedź o wielkości około 300 KB lub więcej nie została zwrócona w ciągu naszego 50-sekundowego testu. Zobacz limity. Ponowna próba nie pomaga; wysyłaj mniej danych lub korzystaj z pamięci masowej.

#
Spróbować ponownie

3. Zdecyduj, czy spróbować ponownie

SDK nigdy nie ponawia próby wywołania: Twoja funkcja może mieć skutki uboczne, a powtarzające się POST domyślnie nie jest bezpieczne. Ty decydujesz, korzystając z poniższej tabeli.

AwariaCzy funkcja została uruchomiona?Można bezpiecznie spróbować ponownie?
503 z platformy (FunctionsRelayError)Nie, środowisko wykonawcze było nieosiągalneTak, z krótką przerwą
429NIETak, po opóźnieniu w error.retryAfter
403 QUOTA_EXCEEDEDNIENie, dopóki limit nie zostanie zresetowany lub nie zmienisz planu
status 0 (network_error)NieznanyTylko jeśli twoja funkcja jest idempotentna
timeout na kliencieNieznanyTylko jeśli twoja funkcja jest idempotentna
FunctionsHttpError 5xxTak, częściowo lub całkowicieTylko jeśli twoja funkcja jest idempotentna
FunctionsHttpError 4xxTakNie: popraw żądanie
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 })
}
Zamiast tego uczyń funkcję idempotentną

Platforma nie deduplikuje wywołań i ignoruje Idempotency-Key. W przypadku płatności lub poczty e-mail przechowuj przekazany klucz w body i sprawdź go przy starcie funkcji.

#
Czas

4. Limity czasu

Trzy zegary działają jednocześnie:

ZegarDomyślnyGdzie to zmienić
Twój klient30 s na każde responseTypeinvoke(…, { timeout }), { signal } lub requestTimeoutMs w opcjach klienta
Funkcja30 s, od 1 do 300permissions.timeout_secs w funkcji
Brama380 snie można konfigurować za pomocą projektów

Gdy funkcja przekracza timeout_secs, środowisko wykonawcze ją anuluje, a wywołanie kończy się niepowodzeniem po mniej więcej tym opóźnieniu, z wartością 500 lub 503 pokazaną powyżej. Przyczyna pojawia się w error.context.detail (WorkerRequestCancelled: request has been cancelled by supervisor) w trybie surowym. Ustaw swojego klienta timeout nieco powyżej timeout_secs funkcji, aby zobaczyć ten błąd zamiast klienta timeout.

timeout.tstypescript
const { error } = await aura.functions.invoke('report', { timeout: 35_000 })
if (error?.code === 'timeout') {
  // Anulowane przez Twojego klienta. Funkcja może nadal działać.
}

W przypadku pracy dłuższej niż kilka sekund wstaw zadanie do kolejki zamiast utrzymywać otwarte połączenie.

#
Odpluskwić

5. Znajdź przyczynę

  • Błędy platformy mają identyfikator żądania: error.details.error.request_id. Podaj go, kontaktując się z pomocą techniczną.
  • aura functions logs <name> wyświetla listę ostatnich żądań HTTP z metodą, ścieżką, statusem, czasem trwania i identyfikatorem żądania. To , a nie pokazuje, co napisała twoja funkcja za pomocą console.log lub console.error: dane wyjściowe pozostają we własnych dziennikach środowiska wykonawczego, które może odczytać tylko operator platformy. Zobacz limity dla tej i innych przerw bieżących.
  • Identyfikator wywołania nie jest przekazywany do Twojej funkcji. Podaj swój własny identyfikator w headers i zaloguj go.
Ostatnia aktualizacja · 12 paź 2026