Anda sebaiknya mengelola siklus proses suatu fungsi agar dapat memastikan bahwa penyelesaian fungsi tersebut berjalan baik. Jika fungsi dihentikan dengan benar, Anda dapat terhindar dari kelebihan biaya karena fungsi berjalan terlalu lama atau mengalami loop tidak terhingga. Selain itu, Anda juga dapat memastikan bahwa instance Cloud Functions yang menjalankan fungsi tidak terhenti sebelum fungsi tersebut berhasil mencapai kondisi atau status berhenti.
Gunakan pendekatan yang direkomendasikan di bawah ini untuk mengelola siklus proses fungsi Anda:
- Selesaikan fungsi yang menjalankan pemrosesan asinkron (disebut juga dengan "fungsi latar belakang") dengan menampilkan promise JavaScript.
- Hentikan fungsi HTTP dengan
res.redirect()
,res.send()
, ataures.end()
. - Hentikan fungsi sinkron dengan pernyataan
return;
.
Menyederhanakan kode asinkron dengan promise JavaScript
Promise adalah alternatif modern bagi callback untuk kode asinkron. Promise mewakili operasi dan nilai di masa mendatang yang mungkin ditampilkan. Dengan promise, Anda juga dapat menerapkan error yang mirip dengan upaya percobaan/pengambilan pada kode sinkron. Anda dapat membaca tentang promise di Firebase SDK di Blog Firebase, dan promise secara umum di MDN.
Cara kerja promise dengan fungsi
Saat Anda menampilkan promise JavaScript ke fungsi, fungsi tersebut akan terus berjalan sampai promise diselesaikan atau ditolak. Untuk menunjukkan bahwa fungsi sudah berhasil menyelesaikan tugasnya, promise tersebut harus diselesaikan. Untuk menunjukkan error, promise harus ditolak. Artinya, Anda hanya perlu menangani error yang diinginkan.
Kode berikut mengambil Firebase Realtime Database ref
dan menetapkan nilainya ke "world!"
. Dengan menampilkan hasil set
, fungsi Anda dijamin akan terus berjalan sampai tugas asinkron penulisan string ke database benar-benar selesai:
// 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!');
});
});
Contoh dalam konteks
Sebagian besar contoh kode Cloud Functions kami mencakup contoh penghentian fungsi secara tepat. Berikut ini beberapa contoh yang menunjukkan kasus khas:
- Pemicu Realtime Database: fungsi HTTP yang diikuti dengan pengalihan
- Pemicu Cloud Storage: Download penyimpanan yang diikuti dengan
then
- Webhook pada penulisan Realtime Database: Error yang ditampilkan di dalam klausa
then
- Secara berkala menghapus akun yang tidak digunakan: Promise ditolak