Senkronizasyon, eşzamansız ve taahhütler

Bir işlevin yaşam döngüsünü, doğru ş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 alan işlevlerden dolayı fazla ücret alınmasını önleyebilirsiniz. Ayrıca, işleviniz sonlandırma koşuluna veya durumuna başarıyla ulaşmadan önce işlevinizi çalıştıran Cloud Functions örneğinin kapanmamasını sağlayabilirsiniz.

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

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

JavaScript vaatleriyle eşzamansız kodu basitleştirin

Vaatler, eşzamansız kod için geri çağırmaların modern bir alternatifidir. Vaat, bir işlemi ve bunun getirebileceği gelecekteki değeri temsil eder. Ayrıca eşzamanlı kodda dene-yakala benzeri hatalar yayabilmenizi sağlar. Firebase SDK'sındaki taahhütler hakkında bilgi edinmek için Firebase Blogu'na, genel olarak ise MDN'ye göz atabilirsiniz.

Vaatlerin işlevlerle işleyiş şekli

Bir işleve JavaScript sözü döndürdüğünüzde, söz konusu işlev, söz konusu işlev sonlandırılana veya reddedilene kadar çalışmaya devam eder. Bir işlevin çalışmasını başarıyla tamamladığını belirtmek için söz verilen sözün çözümlenmesi gerekir. Bir 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 Realtime Database'i (ref) alır ve değerini "world!" olarak ayarlar. set sonucunu döndürdüğünüzde, eşzamansız olarak dize yazma işlemi 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ğlam içinde örnekler

Cloud Functions kod örneklerimizin çoğu uygun işlev sonlandırma örnekleri içerir. Yaygın durumları gösteren birkaç örneği aşağıda bulabilirsiniz: