Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
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 Firebase Realtime Databaseref 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:
Sebagian besar contoh kodeCloud Functions kami mencakup contoh penghentian fungsi secara tepat. Berikut ini beberapa contoh yang menunjukkan kasus khas:
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Informasi yang saya butuhkan tidak ada","missingTheInformationINeed","thumb-down"],["Terlalu rumit/langkahnya terlalu banyak","tooComplicatedTooManySteps","thumb-down"],["Sudah usang","outOfDate","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Masalah kode / contoh","samplesCodeIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 2025-09-05 UTC."],[],[],null,["\u003cbr /\u003e\n\nIt's important to manage the lifecycle of a function to ensure that it resolves\nproperly. By terminating functions correctly, you can avoid excessive charges\nfrom functions that run for too long or loop infinitely. Also, you can make sure\nthat the Cloud Functions instance running your function does not shut down\nbefore your function successfully reaches its terminating condition or state.\n\nUse these recommended approaches to manage the lifecycle of your functions:\n\n- Resolve functions that perform **asynchronous** processing (also known as \"background functions\") by returning a [JavaScript\n promise](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n- Terminate **HTTP functions** with `res.redirect()`, `res.send()`, or `res.end()`.\n- Terminate a **synchronous** function with a `return;` statement.\n\n| **Caution:** In all cases, be careful to avoid any situation in which the function's result actually retriggers the function --- for example, a function triggered by writes to a specific Realtime Database path that concludes by writing to that same path.\n\nSimplify asynchronous code with JavaScript promises\n\nPromises are a modern alternative to callbacks for asynchronous code. A promise\nrepresents an operation and the future value it may return. It also lets you\npropagate errors similar to try/catch in synchronous code. You can read about\npromises in the Firebase SDK on [The Firebase\nBlog](https://firebase.googleblog.com/2016/01/keeping-our-promises-and-callbacks_76.html),\nand promises in general on\n[MDN](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n\nHow promises work with functions\n\nWhen you return a JavaScript promise to a function, that function\nkeeps running until the promise is resolved or rejected. To indicate that a\nfunction has completed its work successfully, the promise should be resolved. To\nindicate an error, the promise should be rejected. This means you only need to\nhandle errors that you want to.\n\nThe following code takes a Firebase Realtime Database `ref` and sets its value to\n`\"world!\"`. By returning the result of `set`, your function is guaranteed to\nkeep running until the asynchronous work of writing the string to the database\nis fully completed: \n\n // Always change the value of \"/hello\" to \"world!\"\n exports.hello = functions.database.ref('/hello').onWrite(event =\u003e {\n // set() returns a promise. We keep the function alive by returning it.\n return event.data.ref.set('world!').then(() =\u003e {\n console.log('Write succeeded!');\n });\n });\n\nExamples in context\n\nMost of our Cloud Functions [code\nsamples](https://github.com/firebase/functions-samples)\ninclude examples of proper function termination. Here are a few that demonstrate\ntypical cases:\n\n- [Realtime Database\n trigger](https://github.com/firebase/functions-samples/tree/main/Node-1st-gen/quickstarts/uppercase-rtdb/functions/index.js): an HTTP function followed by a redirect\n- [Cloud Storage\n trigger](https://github.com/firebase/functions-samples/tree/main/Node-1st-gen/quickstarts/thumbnails/functions/index.js): A storage download followed by `then`\n- [Webhook on Realtime Database\n write](https://github.com/firebase/functions-samples//tree/main/Node-1st-gen/minimal-webhook/functions/index.js): An error thrown inside a `then` clause\n- [Periodically delete unused\n accounts](https://github.com/firebase/functions-samples//tree/main/Node-1st-gen/delete-unused-accounts-cron/functions/index.js): A rejected promise"]]