Sinkron, asinkron, dan promise

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(), atau res.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 ref Firebase Realtime Database 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: