Senkronizasyon, zaman uyumsuz ve vaatler

Düzgün bir şekilde çözüldüğünden emin olmak için bir işlevin 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 giren işlevlerden kaynaklanan aşırı yükleri önleyebilirsiniz. Ayrıca, işlevinizi çalıştıran Cloud Functions örneğinin, işleviniz başarıyla sonlandırma koşuluna veya durumuna ulaşmadan kapanmadığından emin olabilirsiniz.

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

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

JavaScript vaatleriyle eşzamansız kodu basitleştirin

Sözler, zaman uyumsuz kod için geri aramalara modern bir alternatiftir. Taahhüt, bir işlemi ve bunun getirebileceği gelecekteki değeri temsil eder. Aynı zamanda, senkron kodda try/catch benzeri hataları yaymanıza da izin verir. Firebase Blog'daki Firebase SDK'sındaki taahhütler ve MDN'deki genel taahhütler hakkında bilgi edinebilirsiniz.

Vaatler işlevlerle nasıl çalışır?

Bir işleve bir JavaScript taahhüdü döndürdüğünüzde, söz konusu işlev, vaat çözülene veya reddedilene kadar çalışmaya devam eder. Bir fonksiyonun işini başarıyla tamamladığını belirtmek için, taahhüdün çözülmesi gerekir. Bir hatayı belirtmek için söz reddedilmelidir. Bu, yalnızca istediğiniz hataları işlemeniz gerektiği anlamına gelir.

Aşağıdaki kod bir Firebase Realtime Database ref alır ve değerini "world!" olarak ayarlar. . set sonucunu döndürerek, dizeyi veritabanına yazmanın eşzamansız çalışması tamamen tamamlanana kadar işlevinizin ç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ğu, uygun işlev sonlandırma örnekleri içerir. İşte tipik vakaları gösteren birkaç tanesi: