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

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

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

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

JavaScript Promise'leri ile zaman uyumsuz kodu basitleştirme

Promise'ler, 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, senkronize kodda try/catch'e benzer hataları yaymanıza olanak tanır. Firebase SDK'sındaki promise'ler hakkında Firebase Blogu'ndan, genel olarak promise'ler hakkında ise MDN'den bilgi edinebilirsiniz.

Promise'lerin işlevlerle çalışma şekli

Bir işleve JavaScript promise döndürdüğünüzde, bu işlev promise çözümlenene veya reddedilene kadar çalışmaya devam eder. Bir işlevin görevini başarıyla tamamladığını belirtmek için promise çözümlenmelidir. Hata olduğunu belirtmek için promise reddedilmelidir. Bu sayede yalnızca istediğiniz hataları ele almanız gerekir.

Aşağıdaki kod, bir Firebase Realtime Database ref alır ve değerini "world!" olarak ayarlar. set sonucunu döndürerek işlevinizin, dizeyi veritabanına yazma şeklindeki eşzamansız işlem tamamen bitene kadar çalışmaya devam etmesini garanti altına alırsınız:

// 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 doğru şekilde sonlandırılmasına dair örnekler yer alır. Aşağıda, tipik durumları gösteren birkaç örnek verilmiştir: