Sangat penting untuk mengelola siklus hidup suatu fungsi untuk memastikannya diselesaikan dengan benar. Dengan menghentikan fungsi dengan benar, Anda dapat menghindari biaya berlebihan dari fungsi yang berjalan terlalu lama atau berputar tanpa batas. Selain itu, Anda dapat memastikan bahwa instance Cloud Functions yang menjalankan fungsi Anda tidak dimatikan sebelum fungsi Anda berhasil mencapai kondisi atau status penghentiannya.
Gunakan pendekatan yang direkomendasikan ini untuk mengelola siklus hidup fungsi Anda:
- Selesaikan fungsi yang melakukan pemrosesan asinkron (juga dikenal sebagai "fungsi latar belakang") dengan mengembalikan janji JavaScript .
- Hentikan fungsi HTTP dengan
res.redirect()
,res.send()
, ataures.end()
. - Hentikan fungsi sinkron dengan
return;
penyataan.
Sederhanakan kode asinkron dengan janji JavaScript
Janji adalah alternatif modern untuk panggilan balik untuk kode asinkron. Janji mewakili operasi dan nilai masa depan yang mungkin dikembalikannya. Ini juga memungkinkan Anda menyebarkan kesalahan yang mirip dengan try/catch dalam kode sinkron. Anda dapat membaca tentang promise di Firebase SDK di Blog Firebase , dan promise secara umum di MDN .
Bagaimana janji bekerja dengan fungsi
Saat Anda mengembalikan janji JavaScript ke suatu fungsi, fungsi tersebut akan tetap berjalan hingga janji tersebut diselesaikan atau ditolak. Untuk menunjukkan bahwa suatu fungsi telah menyelesaikan pekerjaannya dengan sukses, janji harus diselesaikan. Untuk menunjukkan kesalahan, janji harus ditolak. Ini berarti Anda hanya perlu menangani kesalahan yang Anda inginkan.
Kode berikut mengambil referensi ref
Realtime Database dan menetapkan nilainya ke "world!"
. Dengan mengembalikan hasil set
, fungsi Anda dijamin akan tetap berjalan hingga pekerjaan asinkron penulisan string ke database selesai sepenuhnya:
// 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 menyertakan contoh penghentian fungsi yang tepat. Berikut adalah beberapa yang menunjukkan kasus tipikal:
- Pemicu Realtime Database : fungsi HTTP yang diikuti dengan pengalihan
- Pemicu Cloud Storage : Pengunduhan penyimpanan yang diikuti
then
- Webhook di Realtime Database write : Kesalahan dilemparkan ke dalam klausa
then
- Hapus akun yang tidak digunakan secara berkala : Janji yang ditolak