Senkronizasyon, zaman uyumsuz ve vaatler

Bir işlevin yaşam döngüsünü, düzgün bir şekilde çözümlendiğinden emin olmak için 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ı ücretlendirmeleri önleyebilirsiniz. Ayrıca, işlevinizi çalıştıran Cloud Functions örneğinin, işleviniz başarılı bir şekilde sonlandırma durumuna 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 vaadi döndürerek eşzamansız işleme gerçekleştiren işlevleri ("arka plan işlevleri" olarak da bilinir) çözümleyin.
  • HTTP işlevlerini res.redirect() , res.send() veya res.end() ile sonlandırın.
  • Senkron bir işlevi bir return; ifade.

Eşzamansız kodu JavaScript vaatleriyle basitleştirin

Vaatler, eşzamansız kod için geri aramalara modern bir alternatiftir. Bir söz, bir işlemi ve onun getirebileceği gelecekteki değeri temsil eder. Ayrıca senkronize koddaki try/catch'e benzer hataları yaymanıza da olanak tanır. Firebase SDK'sındaki vaatler hakkında Firebase Blog'da ve genel olarak vaatler hakkında MDN'de bilgi edinebilirsiniz.

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

Bir fonksiyona bir JavaScript vaadi döndürdüğünüzde, o fonksiyon söz çözülene veya reddedilene kadar çalışmaya devam eder. Bir fonksiyonun işini başarıyla tamamladığının göstergesi için söz konusu işlemin çözümlenmesi gerekir. Hatayı belirtmek için sözün reddedilmesi gerekir. Bu, yalnızca istediğiniz hataları ele almanız gerektiği anlamına gelir.

Aşağıdaki kod bir Firebase Gerçek Zamanlı Veritabanı ref alır ve değerini "world!" olarak ayarlar. . set sonucunu döndürdüğünüzde, işlevinizin, dizeyi veritabanına yazmanın eşzamansız çalışması tamamen tamamlanıncaya 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

Bulut İşlevleri kod örneklerimizin çoğu, uygun işlev sonlandırma örneklerini içerir. İşte tipik vakaları gösteren birkaç örnek: