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. Fonksiyonları doğru şekilde sonlandırarak çok uzun süre çalışan veya sonsuz döngüye giren fonksiyonlardan 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 gerçekleştiren işlevleri (aynı zamanda "arka plan işlevleri" olarak da bilinir) JavaScript promise döndürerek çözün.
  • res.redirect(), res.send() veya res.end() ile HTTP işlevlerini sonlandırın.
  • return; ifadesiyle senkron bir işlevi sonlandırın.

JavaScript sözleriyle zaman uyumsuz kodu basitleştirme

Promise'lar, 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, senkron 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 çalışma şekli

Bir işlev için JavaScript promise döndürdüğünüzde bu işlev, promise çözülene veya reddedilene kadar ç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 alır ve değerini "world!" olarak ayarlar. set sonucunu döndürerek işlevinizin, dizeyi veritabanına yazma işleminin eşzamansız çalışması tamamen tamamlanana 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: