Aurabase Logosu
aura tabanıdokümanlar
dokümanlar›Edge Functions›Errors, timeouts and retries

Hatalar, zaman aşımları ve yeniden denemeler

Bir şeyler ters gittiğinde ve güvenli bir şekilde tekrar arayabileceğiniz zaman invoke'nin ne döndürdüğünü nasıl okuyabilirsiniz?

9 dk. oku·Seviye orta düzey·12 Eki 2026 tarihinde revize edildi
Bu İngilizce metin, Fransızca orijinalinden otomatik olarak oluşturulmuştur ve henüz incelenmemiştir.
Bu sayfa otomatik olarak çevrildi. İngilizce versiyonu yetkilidir.
#
Anatomi

1. Hata nesnesi

invoke, { data, error } değerini döndürür ve asla fırlatmaz. error bir AuraError olduğundan isAuraError(error) doğrudur. İki alt sınıf size kimin başarısız olduğunu söyler:

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

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

if (error instanceof FunctionsHttpError) {
  // İşleviniz bir hata durumuyla yanıt verdi. Kodunuzda hata ayıklayın.
} else if (error instanceof FunctionsRelayError) {
  // Platform başarısız oldu: işlevinizin yanıtı asla geri gelmedi.
} else if (error) {
  // Çağrı istemcide iptal edildi veya reddedildi (zaman aşımı, geçersiz_body, no_session).
}
AlanAnlamı
error.statusHTTP durumu. 0 hatanın istemcide meydana geldiği (yanıt yok) anlamına gelir.
error.codeKararlı tanımlayıcı, örneğin NOT_FOUND, QUOTA_EXCEEDED, timeout, invalid_body.
error.messageİşlevinizin döndürdüğü metin veya platformun açıklaması.
error.contextFunctionsHttpError üzerinde: işlevinizin döndürdüğü gövde (ayrıştırılmış JSON veya metin).
error.detailsHam hata gövdesi. Bir platform hatası için error.request_id içerir.
#
Teşhis

2. Hangi hatadır?

Çalışan bir yığına karşı gözlemlenen davranışlar. Kota satırı, arka ucun hata eşlemesini takip eder ve testlerimizde tetiklenmemiştir.

Ne oldu?Sınıfstatuscodemessage
İşlev mevcut değilFunctionsHttpError404NOT_FOUND"…'hayır' işlevi kaçınılmaz"
İşleviniz metinle birlikte 500 değerini döndürürFunctionsHttpError500http_500o metin
İşleviniz 503 öğesinin kendisini döndürürFunctionsHttpError503http_503neyi geri verdin
İşleviniz fırlatırFunctionsHttpError500http_500"Dahili Sunucu Hatası"
İşleviniz timeout_secs değerini aşıyorFunctionsHttpError500 veya 503http_500 / http_503"İşlev yürütme başarısız oldu" veya "İşlev HTTP 503 döndürdü"
Çalışma zamanına erişilemiyorFunctionsRelayError503SERVICE_UNAVAILABLEfonksiyonun çalıştırılmadığını açıklıyor
Ağ herhangi bir yanıt vermeden önce başarısız oluyorFunctionsRelayError0network_errorağ hatası
Plan kotası dolduFunctionsHttpError403QUOTA_EXCEEDEDkota mesajı
Bir müşteriden çok fazla çağrıFunctionsHttpError429rate_limit_exceededmesajı bekleyin
İstek gövdesi çok büyükFunctionsRelayError503SERVICE_UNAVAILABLE"maksimum yük boyutu aşıldı"
İptal ettiniz veya timeout süreniz dolduAuraError0timeout"İşlev çağrısı iptal edildi veya zaman aşımına uğradı"
Gövde JSON olarak gönderilemiyorAuraError0invalid_bodykaçınılması gereken türü adlandırır
İşlevinizden gelen bir 503, platform hatası değildir

Kendi kodunuz 502, 503 veya 504 değerini döndürürse, bir FunctionsHttpError alırsınız: sınıf size durum numarasının ne olduğunu değil kimin yanıt verdiğini söyler.

İki başarısızlık başka bir şeye benziyor

Yaklaşık 256 KiB'nin üzerindeki bir istek gövdesi 503 SERVICE_UNAVAILABLE ile reddedilir ve yaklaşık 300 KB veya daha büyük bir yanıtı 50 saniyelik testimiz içinde geri dönmedi. sınırlarına bakın. Yeniden denemek yardımcı olmuyor; daha az veri gönderin veya Depolamayı kullanın.

#
Yeniden dene

3. Yeniden deneyip deneymeyeceğinize karar verin

SDK hiçbir zaman sizin için bir çağrıyı yeniden denemez: işlevinizin yan etkileri olabilir ve tekrarlanan POST varsayılan olarak güvenli değildir. Aşağıdaki tabloyu kullanarak siz karar verin.

BaşarısızlıkFonksiyon çalıştı mı?Yeniden denemek güvenli mi?
503 platformdan (FunctionsRelayError)Hayır, çalışma zamanına ulaşılamadıEvet, kısa bir arayla
429HayırEvet, error.retryAfter gecikmesinden sonra
403 QUOTA_EXCEEDEDHayırHayır, kota sıfırlanana veya siz planı değiştirene kadar
status 0 (network_error)BilinmiyorYalnızca işleviniz idempotent ise
İstemcide timeoutBilinmiyorYalnızca işleviniz idempotent ise
FunctionsHttpError 5xxEvet, kısmen veya tamamenYalnızca işleviniz idempotent ise
FunctionsHttpError 4xxEvetHayır: isteği düzelt
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 })
}
Bunun yerine fonksiyonu idempotent yapın

Platform çağrıları tekilleştirmez ve Idempotency-Key öğesini yok sayar. Ödemeler veya e-posta için, ilettiğiniz anahtarı body içinde saklayın ve işlevin başlangıcında kontrol edin.

#
Zaman

4. Zaman Aşımları

Üç saat aynı anda çalışır:

SaatVarsayılanNereden değiştirilmeli
MüşterinizHer responseType için 30 saniyeİstemci seçeneklerinde invoke(…, { timeout }), { signal } veya requestTimeoutMs
fonksiyon30 sn, 1 ile 300 arasındapermissions.timeout_secs işlevde
Ağ geçidi380 sprojelere göre yapılandırılamaz

İşlev timeout_secs değerini aştığında, çalışma zamanı onu iptal eder ve yukarıda gösterilen 500 veya 503 ile yaklaşık bu gecikmeden sonra çağrınız başarısız olur. Nedeni ham modda error.context.detail (WorkerRequestCancelled: request has been cancelled by supervisor) içinde görünüyor. Bu hatayı görmek için timeout istemcisi yerine istemcinizi timeout işlevin timeout_secs biraz üstüne ayarlayın.

timeout.tstypescript
const { error } = await aura.functions.invoke('report', { timeout: 35_000 })
if (error?.code === 'timeout') {
  // Müşteriniz tarafından iptal edildi. İşlev hâlâ çalışıyor olabilir.
}

Birkaç saniyeden uzun bir çalışma için, bağlantıyı açık tutmak yerine işini kuyruğa alın.

#
Hata ayıklama

5. Sebebini bulun

  • Platform hataları bir istek kimliği taşır: error.details.error.request_id. Destek ekibiyle iletişime geçtiğinizde bunu alıntılayın.
  • aura functions logs <name> en son HTTP isteklerini yöntem, yol, durum, süre ve istek kimliğiyle birlikte listeler. işlevinizin console.log veya console.error ile ne yazdığını göstermez: çıktı, yalnızca platform operatörünün okuyabileceği çalışma zamanının kendi günlüklerinde kalır. Bu ve diğer mevcut boşluklar için sınırlarına bakın.
  • Çağrının tanımlayıcısı işlevinize iletilmez. Kendi kimliğinizi headers içine iletin ve günlüğe kaydedin.