Düzgün şekilde çözümlenmesini sağlamak için bir işlevin yaşam döngüsünü yönetmek önemlidir. İşlevleri doğru şekilde sonlandırarak çok uzun süre çalışan veya sonsuz döngüye giren 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 kapanmadığından emin olabilirsiniz.
İşlevlerinizin yaşam döngüsünü yönetmek için aşağıdaki önerilen yaklaşımları kullanın:
- Eşzamansız işleme gerçekleştiren işlevleri ("arka plan işlevleri" olarak da bilinir) bir JavaScript promise döndürerek çözün.
- HTTP işlevlerini
res.redirect(),res.send()veyares.end()ile sonlandırın. - Eşzamanlı bir işlevi
return;ifadesiyle sonlandırın.
JavaScript Promise'leri ile zaman uyumsuz kodu basitleştirme
Promise'ler, 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, senkronize kodda try/catch'e benzer hataları yaymanıza olanak tanır. Firebase SDK'sındaki promise'ler hakkında Firebase Blogu'ndan, genel olarak promise'ler hakkında ise MDN'den bilgi edinebilirsiniz.
Promise'lerin işlevlerle çalışma şekli
Bir işleve JavaScript promise döndürdüğünüzde, bu işlev promise çözümlenene veya reddedilene kadar çalışmaya devam eder. Bir işlevin görevini başarıyla tamamladığını belirtmek için promise çözümlenmelidir. Hata olduğunu belirtmek için promise reddedilmelidir. Bu sayede yalnızca istediğiniz hataları ele almanız gerekir.
Aşağıdaki kod, bir Firebase Realtime Database ref alır ve değerini "world!" olarak ayarlar. set sonucunu döndürerek işlevinizin, dizeyi veritabanına yazma şeklindeki eşzamansız işlem tamamen bitene kadar çalışmaya devam etmesini garanti altına alırsınız:
// 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çindeki örnekler
Cloud Functions Kod örneklerimizin çoğunda, işlevlerin doğru şekilde sonlandırılmasına dair örnekler yer alır. Aşağıda, tipik durumları gösteren birkaç örnek verilmiştir:
- Realtime Database tetikleyicisi: HTTP işlevi ve ardından yönlendirme
- Cloud Storage
tetikleyicisi:
Depolama alanından indirme işleminin ardından
then - Realtime Database'de webhook
yazma:
thenyan tümcesinde hata oluştu - Kullanılmayan hesapları düzenli olarak silme: Reddedilen bir vaat