Fouten, time-outs en nieuwe pogingen
Hoe u kunt lezen wat invoke retourneert als er iets misgaat en wanneer u weer veilig kunt bellen.
1. Het foutobject
invoke retourneert { data, error } en gooit nooit. error is een AuraError, dus isAuraError(error) is waar. Twee subklassen vertellen je wie heeft gefaald:
| Veld | Betekenis |
|---|---|
error.status | HTTP-status. 0 betekent dat de fout op de client heeft plaatsgevonden (geen reactie). |
error.code | Stabiele ID, bijvoorbeeld NOT_FOUND, QUOTA_EXCEEDED, timeout, invalid_body. |
error.message | De tekst die uw functie heeft geretourneerd, of de uitleg van het platform. |
error.context | Op een FunctionsHttpError: de hoofdtekst die uw functie heeft geretourneerd (geparseerde JSON of tekst). |
error.details | De onbewerkte fouttekst. Voor een platformfout bevat deze error.request_id. |
2. Welke fout is het?
Gedrag waargenomen tegen een lopende stapel. De quotarij volgt de fouttoewijzing van de backend en werd niet geactiveerd in onze tests.
| Wat is er gebeurd | Klasse | status | code | message |
|---|---|---|---|---|
| De functie bestaat niet | FunctionsHttpError | 404 | NOT_FOUND | "... Functie 'nee' lastig" |
Uw functie retourneert 500 met tekst | FunctionsHttpError | 500 | http_500 | die tekst |
Uw functie retourneert 503 zelf | FunctionsHttpError | 503 | http_503 | wat je terugstuurde |
| Je functie gooit | FunctionsHttpError | 500 | http_500 | "Interne serverfout" |
Uw functie overschrijdt zijn timeout_secs | FunctionsHttpError | 500 of 503 | http_500 / http_503 | "Functie-uitvoering mislukt" of "Functie retourneert HTTP 503" |
| De looptijd is onbereikbaar | FunctionsRelayError | 503 | SERVICE_UNAVAILABLE | legt uit dat de functie en niet werd uitgevoerd |
| Het netwerk valt uit voordat er enige reactie is | FunctionsRelayError | 0 | network_error | de netwerkfout |
| Planquota zijn opgebruikt | FunctionsHttpError | 403 | QUOTA_EXCEEDED | het quotumbericht |
| Te veel telefoontjes van één klant | FunctionsHttpError | 429 | rate_limit_exceeded | wacht bericht |
| Verzoek lichaam te groot | FunctionsRelayError | 503 | SERVICE_UNAVAILABLE | "Max. laadvermogen overschreden" |
Je hebt geannuleerd of je timeout is verstreken | AuraError | 0 | timeout | "Functieaanroep afgebroken of time-out" |
| De hoofdtekst kan niet als JSON worden verzonden | AuraError | 0 | invalid_body | noemt het type dat moet worden vermeden |
Als uw eigen code 502, 503 of 504 retourneert, krijgt u een FunctionsHttpError: de klas vertelt u wie heeft geantwoord, niet wat het statusnummer is.
Een verzoektekst van meer dan ongeveer 256 KiB wordt afgewezen met 503 SERVICE_UNAVAILABLE en een -antwoord van ongeveer 300 KB of meer kwam niet terug binnen onze test van 50 seconden. Zie limieten. Opnieuw proberen helpt niet; stuur minder gegevens of gebruik opslag.
3. Bepaal of u het opnieuw wilt proberen
De SDK probeert nooit opnieuw een aanroep voor u uit te voeren: uw functie kan bijwerkingen hebben en een herhaalde POST is standaard niet veilig. U beslist aan de hand van onderstaande tabel.
| Mislukking | Is de functie uitgevoerd? | Veilig opnieuw proberen? |
|---|---|---|
503 vanaf het platform (FunctionsRelayError) | Nee, de runtime was onbereikbaar | Ja, met een korte pauze |
429 | Nee | Ja, na de vertraging in error.retryAfter |
403 QUOTA_EXCEEDED | Nee | Nee, totdat het quotum opnieuw wordt ingesteld of u van abonnement verandert |
status 0 (network_error) | Onbekend | Alleen als uw functie idempotent is |
timeout op de client | Onbekend | Alleen als uw functie idempotent is |
FunctionsHttpError 5xx | Ja, gedeeltelijk of volledig | Alleen als uw functie idempotent is |
FunctionsHttpError 4xx | Ja | Nee: corrigeer het verzoek |
Het platform ontdubbelt geen oproepen en negeert Idempotency-Key. Voor betalingen of e-mail slaat u een sleutel op die u doorgeeft in body en controleert u deze bij aanvang van de functie.
4. Time-outs
Drie klokken lopen tegelijk:
| Klok | Standaard | Waar u dit kunt wijzigen |
|---|---|---|
| Jouw klant | 30 s voor elke responseType | invoke(…, { timeout }), { signal } of requestTimeoutMs in de clientopties |
| De functie | 30 s, tussen 1 en 300 | permissions.timeout_secs op de functie |
| De poort | 380 s | niet configureerbaar door projecten |
Wanneer de functie timeout_secs overschrijdt, wordt deze door de runtime geannuleerd en mislukt uw oproep na ongeveer die vertraging, met de hierboven weergegeven 500 of 503. De oorzaak verschijnt in error.context.detail (WorkerRequestCancelled: request has been cancelled by supervisor) in onbewerkte modus. Stel uw client timeout iets boven de timeout_secs van de functie in om deze fout te zien in plaats van een client timeout.
Voor werk dat langer dan een paar seconden duurt, zet een taak in de wachtrij in plaats van een verbinding open te houden.
5. Zoek de oorzaak
- Platformfouten hebben een verzoek-ID:
error.details.error.request_id. Vermeld dit wanneer u contact opneemt met de ondersteuning. aura functions logs <name>geeft een overzicht van recente HTTP-verzoeken met methode, pad, status, duur en verzoek-ID. Het laat en niet zien wat uw functie heeft geschreven metconsole.logofconsole.error: die uitvoer blijft in de eigen logs van de runtime, die alleen de platformoperator kan lezen. Zie limieten voor deze en de andere huidige hiaten.- De identificatie van de oproep wordt niet doorgestuurd naar uw functie. Geef uw eigen ID door in
headersen log deze in.