Fehler, Zeitüberschreitungen und Wiederholungsversuche
So lesen Sie, was invoke zurückgibt, wenn etwas schief geht und Sie sicher erneut anrufen können.
1. Das Fehlerobjekt
invoke gibt { data, error } zurück und löst nie aus. error ist ein AuraError, also ist isAuraError(error) wahr. Zwei Unterklassen sagen Ihnen , wer versagt hat:
| Feld | Bedeutung |
|---|---|
error.status | HTTP-Status. 0 bedeutet, dass der Fehler auf dem Client aufgetreten ist (keine Antwort). |
error.code | Stabiler Bezeichner, zum Beispiel NOT_FOUND, QUOTA_EXCEEDED, timeout, invalid_body. |
error.message | Der von Ihrer Funktion zurückgegebene Text oder die Erklärung der Plattform. |
error.context | Auf einem FunctionsHttpError: der von Ihrer Funktion zurückgegebene Text (geparstes JSON oder Text). |
error.details | Der Rohfehlertext. Für einen Plattformfehler enthält es error.request_id. |
2. Um welchen Fehler handelt es sich?
Beobachtete Verhaltensweisen gegenüber einem laufenden Stapel. Die Kontingentzeile folgt der Fehlerzuordnung des Backends und wurde in unseren Tests nicht ausgelöst.
| Was ist passiert? | Klasse | status | code | message |
|---|---|---|---|---|
| Die Funktion existiert nicht | FunctionsHttpError | 404 | NOT_FOUND | „…Funktion ‚nein‘ unlösbar“ |
Ihre Funktion gibt 500 mit Text zurück | FunctionsHttpError | 500 | http_500 | dieser Text |
Ihre Funktion gibt 503 selbst zurück | FunctionsHttpError | 503 | http_503 | was du zurückgegeben hast |
| Ihre Funktion wirft | FunctionsHttpError | 500 | http_500 | „Interner Serverfehler“ |
Ihre Funktion überschreitet ihre timeout_secs | FunctionsHttpError | 500 oder 503 | http_500 / http_503 | „Funktionsausführung fehlgeschlagen“ oder „Funktion hat HTTP 503 zurückgegeben“ |
| Die Laufzeit ist nicht erreichbar | FunctionsRelayError | 503 | SERVICE_UNAVAILABLE | erklärt, dass die Funktion nicht ausgeführt wurde |
| Das Netzwerk schlägt fehl, bevor eine Antwort erfolgt | FunctionsRelayError | 0 | network_error | der Netzwerkfehler |
| Plankontingent ausgeschöpft | FunctionsHttpError | 403 | QUOTA_EXCEEDED | die Quotenmeldung |
| Zu viele Anrufe von einem Kunden | FunctionsHttpError | 429 | rate_limit_exceeded | warte Nachricht |
| Anfragetext zu groß | FunctionsRelayError | 503 | SERVICE_UNAVAILABLE | „Maximale Nutzlastgröße überschritten“ |
Sie haben abgebrochen oder Ihr timeout ist abgelaufen | AuraError | 0 | timeout | „Funktionsaufruf abgebrochen oder Zeitüberschreitung“ |
| Der Text kann nicht als JSON gesendet werden | AuraError | 0 | invalid_body | benennt den zu vermeidenden Typ |
Wenn Ihr eigener Code 502, 503 oder 504 zurückgibt, erhalten Sie ein FunctionsHttpError: Die Klasse sagt Ihnen, wer geantwortet hat, nicht die Statusnummer.
Ein Anfragetext mit mehr als etwa 256 KiB wird mit 503 SERVICE_UNAVAILABLE abgelehnt und eine -Antwort von etwa 300 KB oder mehr wurde innerhalb unseres 50-Sekunden-Tests nicht zurückgegeben. Siehe -Grenzwerte. Ein erneuter Versuch hilft nicht; Senden Sie weniger Daten oder verwenden Sie Speicher.
3. Entscheiden Sie, ob Sie es erneut versuchen möchten
Das SDK wiederholt niemals einen Aufruf für Sie: Ihre Funktion kann Nebenwirkungen haben und ein wiederholtes POST ist standardmäßig nicht sicher. Sie entscheiden anhand der folgenden Tabelle.
| Misserfolg | Wurde die Funktion ausgeführt? | Sicherer erneuter Versuch? |
|---|---|---|
503 von der Plattform (FunctionsRelayError) | Nein, die Laufzeit war nicht erreichbar | Ja, mit einer kurzen Pause |
429 | Nein | Ja, nach der Verzögerung in error.retryAfter |
403 QUOTA_EXCEEDED | Nein | Nein, bis das Kontingent zurückgesetzt wird oder Sie den Plan ändern |
status 0 (network_error) | Unbekannt | Nur wenn Ihre Funktion idempotent ist |
timeout auf dem Client | Unbekannt | Nur wenn Ihre Funktion idempotent ist |
FunctionsHttpError 5xx | Ja, teilweise oder vollständig | Nur wenn Ihre Funktion idempotent ist |
FunctionsHttpError 4xx | Ja | Nein: Korrigieren Sie die Anfrage |
Die Plattform dedupliziert keine Aufrufe und ignoriert Idempotency-Key. Speichern Sie für Zahlungen oder E-Mails einen Schlüssel, den Sie in body übergeben, und überprüfen Sie ihn beim Start der Funktion.
4. Auszeiten
Drei Uhren laufen gleichzeitig:
| Uhr | Standard | Wo kann man es ändern? |
|---|---|---|
| Ihr Kunde | 30 s für jedes responseType | invoke(…, { timeout }), { signal } oder requestTimeoutMs in den Clientoptionen |
| Die Funktion | 30 s, zwischen 1 und 300 | permissions.timeout_secs für die Funktion |
| Das Tor | 380 s | nicht durch Projekte konfigurierbar |
Wenn die Funktion timeout_secs überschreitet, wird sie von der Laufzeit abgebrochen und Ihr Aufruf schlägt nach etwa dieser Verzögerung fehl, mit den oben gezeigten 500 oder 503. Die Ursache erscheint in error.context.detail (WorkerRequestCancelled: request has been cancelled by supervisor) im Rohmodus. Stellen Sie Ihren Client timeout etwas über dem timeout_secs der Funktion ein, um diesen Fehler anstelle eines Clients timeout anzuzeigen.
Für Arbeiten, die länger als ein paar Sekunden dauern, einen Job in die Warteschlange einreihen, anstatt eine Verbindung offen zu halten.
5. Finden Sie die Ursache
- Plattformfehler tragen eine Anforderungs-ID:
error.details.error.request_id. Geben Sie es an, wenn Sie den Support kontaktieren. aura functions logs <name>listet aktuelle HTTP-Anfragen mit Methode, Pfad, Status, Dauer und Anfrage-ID auf. Es zeigt nicht an, was Ihre Funktion mitconsole.logoderconsole.errorgeschrieben hat: Diese Ausgabe bleibt in den eigenen Protokollen der Laufzeit, die nur der Plattformbetreiber lesen kann. Siehe -Grenzwerte für diese und die anderen aktuellen Lücken.- Die Kennung des Aufrufs wird nicht an Ihre Funktion weitergeleitet. Übergeben Sie Ihre eigene ID in
headersund protokollieren Sie sie.