Eşzamanlı ve eş zamansız içerikler, taahhütler

Bir işlevin yaşam döngüsünü yönetmek, işlevin düzgün şekilde çözülmesini sağlamak için önemlidir. İşlevleri doğru şekilde sonlandırarak çok uzun süre çalışan veya sonsuz döngüye giren işlevlerden kaynaklanan aşırı ücretlendirmeleri önleyebilirsiniz. Ayrıca, işlevinizin sonlandırma koşuluna veya durumuna başarıyla ulaşmadan önce işlevinizi çalıştıran Cloud Functions örneğinin kapatılmadığından da emin olabilirsiniz.

İşlevlerinizin yaşam döngüsünü yönetmek için önerilen bu yaklaşımları kullanın:

  • Eşzamansız işleme (aynı zamanda "arka plan işlevleri" olarak da bilinir) gerçekleştiren işlevleri bir JavaScript promise döndürerek çözün.
  • HTTP işlevlerini res.redirect(), res.send() veya res.end() ile sonlandırın.
  • return; ifadesiyle senkron bir işlevi sonlandırın.

JavaScript sözleriyle asenkron kodu basitleştirme

Sözler, zaman uyumsuz kod için geri çağırmalara modern bir alternatiftir. Promise, bir işlemi ve döndürebileceği gelecekteki değeri temsil eder. Ayrıca, zaman uyumlu kodda try/catch'e benzer şekilde hataları yaymanıza da olanak tanır. Firebase SDK'sındaki sözler hakkında Firebase Blogu'nda, genel olarak sözler hakkında ise MDN'de bilgi edinebilirsiniz.

Sözlerin işlevlerle işleyiş şekli

Bir işlev için JavaScript sözü döndürdüğünüzde, söz yerine getirilene veya reddedilene kadar işlev çalışmaya devam eder. Bir işlevin çalışmasını başarıyla tamamladığını belirtmek için sözün yerine getirilmesi gerekir. Bir hatayı belirtmek için promise reddedilmelidir. Bu, yalnızca istediğiniz hataları işlemeniz gerektiği anlamına gelir.

Aşağıdaki kod, Firebase Realtime Database ref alır ve değerini "world!" olarak ayarlar. set sonucunu döndürerek işlevinizin, dizeyi veritabanına yazma işleminin eşzamansız olarak tamamlanmasına kadar çalışmaya devam etmesi garanti edilir:

// Always change the value of "/hello" to "world!"
exports.hello = functions.database.ref('/hello').onWrite(event => {
  // set() returns a promise. We keep the function alive by returning it.
  return event.data.ref.set('world!').then(() => {
    console.log('Write succeeded!');
  });
});

Bağlam içindeki örnekler

Cloud Functions Kod örneklerimizin çoğunda, işlevlerin uygun şekilde sonlandırılmasıyla ilgili örnekler yer alır. Aşağıda, tipik durumları gösteren birkaç örnek verilmiştir: