חשוב לנהל את מחזור החיים של פונקציה כדי לוודא שהיא פועלת בצורה תקינה. אם מסיימים את הפונקציות בצורה נכונה, אפשר להימנע מחיובים מוגזמים על פונקציות שפועלות יותר מדי זמן או שחוזרות על עצמן ללא הפסקה. בנוסף, אפשר לוודא שמופע 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 Database ref
ומגדיר את הערך שלו ל-"world!"
. החזרת התוצאה של set
מבטיחה שהפונקציה תמשיך לפעול עד שהעבודה האסינכרונית של כתיבת המחרוזת למסד הנתונים תושלם:
// 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!');
});
});
דוגמאות בהקשר
רוב Cloud Functions דוגמאות הקוד שלנו כוללות דוגמאות לסיום תקין של פונקציה. הנה כמה דוגמאות שממחישות מקרים טיפוסיים:
- טריגר של Realtime Database: פונקציית HTTP ואחריה הפניה לכתובת אחרת
- טריגר של Cloud Storage:
הורדה מאחסון ואחריה
then
- תגובה לפעולה מאתר אחר (webhook) ב-Realtime Database
write:
שגיאה שמוחזרת בתוך סעיף
then
- מחיקה תקופתית של חשבונות לא פעילים: הבטחה שנדחתה