Senkronizasyon, eşzamansız ve taahhütler

İşlevin doğru şekilde çözümlendiğinden emin olmak için yaşam döngüsünü yönetmek önemlidir. İşlevleri doğru bir şekilde sonlandırarak çok uzun süre çalışan veya sonsuz döngüye sahip 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 kapanmamasını sağlayabilirsiniz.

İşlevlerinizin yaşam döngüsünü yönetmek için şu önerilen yaklaşımlardan yararlanın:

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

JavaScript'in vaatleri ile eşzamansız kodları basitleştirin

Vaatler, eşzamansız kod için geri çağırmaların modern bir alternatifidir. Vaat, bir işlemi ve döndürebileceği gelecekteki değeri temsil eder. Ayrıca eşzamanlı kodda "dene/yaka"ya benzer şekilde hataları yaymanıza olanak tanır. Firebase blogunda Firebase SDK'sında bulunan ve genel olarak MDN'de verilen vaatler hakkında bilgi edinebilirsiniz.

Vaatlerin işlevlerle çalışma şekli

Bir işlev için JavaScript taahhüdünü döndürdüğünüzde söz konusu işlev, taahhüt uygulanana veya reddedilene kadar çalışmaya devam eder. Bir işlevin çalışmasını başarıyla tamamladığını belirtmek için vaat yerine getirilmelidir. Bir hata olduğunu belirtmek için taahhüt reddedilmelidir. Bu, sadece istediğiniz hataları ele almanız gerektiği anlamına gelir.

Aşağıdaki kod, bir Firebase Realtime Database ref değerini alır ve değerini "world!" olarak ayarlar. set işlevinin sonucunu döndürdüğünüzde, dizeyi veritabanına yazmayla ilgili eşzamansız çalışma tamamen tamamlanana kadar işlevinizin çalışmaya devam edeceği 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ğlama dayalı örnekler

Cloud Functions kod örneklerimizin çoğu, uygun işlev sonlandırma örnekleri içerir. Aşağıda tipik örnekleri gösteren birkaç örnek verilmiştir: