קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
חשוב לנהל את מחזור החיים של פונקציה כדי לוודא שהיא פועלת בצורה תקינה. אם מסיימים את הפונקציות בצורה נכונה, אפשר להימנע מחיובים מוגזמים על פונקציות שפועלות יותר מדי זמן או שחוזרות על עצמן ללא הפסקה. בנוסף, אפשר לוודא שמופע Cloud Functions שבו הפונקציה פועלת לא נסגר לפני שהפונקציה מגיעה בהצלחה לתנאי או למצב הסיום שלה.
כדי לנהל את מחזור החיים של הפונקציות, מומלץ להשתמש בגישות הבאות:
כדי לפתור פונקציות שמבצעות עיבוד אסינכרוני (שנקראות גם 'פונקציות ברקע'), צריך להחזיר הבטחת JavaScript.
סיום של פונקציות HTTP באמצעות res.redirect(), res.send() או res.end().
מפסיקים פונקציה סינכרונית באמצעות הצהרת return;.
פישוט קוד אסינכרוני באמצעות הבטחות ב-JavaScript
הבטחות הן חלופה מודרנית לקריאות חוזרות (callback) עבור קוד אסינכרוני. אובייקט Promise מייצג פעולה ואת הערך העתידי שהוא עשוי להחזיר. היא גם מאפשרת להפיץ שגיאות באופן דומה ל-try/catch בקוד סינכרוני. אפשר לקרוא על הבטחות ב-Firebase SDK בבלוג של Firebase, ועל הבטחות באופן כללי ב-MDN.
איך משתמשים ב-promises עם פונקציות
כשמחזירים אובייקט promise של JavaScript לפונקציה, הפונקציה ממשיכה לפעול עד שהאובייקט promise נפתר או נדחה. כדי לציין שפונקציה השלימה את העבודה שלה בהצלחה, צריך להשלים את ההבטחה. כדי לציין שגיאה, צריך לדחות את ההבטחה. כלומר, אתם צריכים לטפל רק בשגיאות שאתם רוצים.
הקוד הבא לוקח Firebase Realtime Databaseref ומגדיר את הערך שלו ל-"world!". החזרת התוצאה של set מבטיחה שהפונקציה תמשיך לפעול עד שהעבודה האסינכרונית של כתיבת המחרוזת למסד הנתונים תושלם במלואה:
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 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"]]