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ümlenmesini 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şlevinizi çalıştıran Cloud Functions örneğinin, işleviniz sonlandırma koşuluna veya durumuna başarıyla ulaşmadan önce kapanmadığı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 ("arka plan işlevleri" olarak da bilinir) gerçekleştiren işlevleri bir JavaScript promise döndürerek çözün.
  • res.redirect(), res.send() veya res.end() ile HTTP işlevlerini sonlandırın.
  • return; ifadesiyle senkronize bir işlevi sonlandırın.

JavaScript sözleriyle eşzamansız 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 sayede, yalnızca istediğiniz hataları işleyebilirsiniz.

Aşağıdaki kod, Firebase Realtime Database ref değerini 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ğlamdaki örnekler

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