סנכרון, אסינכרון והבטחות

חשוב לנהל את מחזור החיים של פונקציה כדי להבטיח שהיא תיפתר כראוי. על ידי סיום נכון של פונקציות, אתה יכול למנוע חיובים מוגזמים מפונקציות הפועלות זמן רב מדי או בלולאה אינסופית. כמו כן, אתה יכול לוודא שהמופע של Cloud Functions שמריץ את הפונקציה שלך לא נכבה לפני שהפונקציה שלך מגיעה בהצלחה למצב או למצב הסיום שלה.

השתמש בגישות המומלצות הבאות כדי לנהל את מחזור החיים של הפונקציות שלך:

  • פתור פונקציות שמבצעות עיבוד אסינכרוני (הידוע גם בשם "פונקציות רקע") על ידי החזרת הבטחת JavaScript .
  • סיים פונקציות HTTP עם res.redirect() , res.send() או res.end() .
  • סיים פונקציה סינכרונית עם return; הַצהָרָה.

פשט קוד אסינכרוני עם הבטחות JavaScript

הבטחות הן חלופה מודרנית להתקשרות חוזרת עבור קוד אסינכרוני. הבטחה מייצגת פעולה ואת הערך העתידי שהיא עשויה להחזיר. זה גם מאפשר לך להפיץ שגיאות דומות לנסות/לתפוס בקוד סינכרוני. אתה יכול לקרוא על הבטחות ב-Firebase SDK ב- The Firebase Blog , והבטחות באופן כללי ב- MDN .

איך הבטחות עובדות עם פונקציות

כאשר אתה מחזיר הבטחת JavaScript לפונקציה, פונקציה זו ממשיכה לפעול עד שההבטחה תיפתר או תדחה. כדי לציין שפונקציה סיימה את עבודתה בהצלחה, יש לפתור את ההבטחה. כדי להצביע על טעות, יש לדחות את ההבטחה. זה אומר שאתה צריך לטפל רק בשגיאות שאתה רוצה.

הקוד הבא לוקח ref של Firebase Realtime Database ומגדיר את הערך שלו ל"עולם "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!');
  });
});

דוגמאות בהקשר

רוב דוגמאות הקוד של פונקציות הענן שלנו כוללות דוגמאות לסיום תפקוד נכון. הנה כמה המדגימים מקרים טיפוסיים: