همگام، غیرهمگام، و وعده‌ها

مدیریت چرخه حیات تابع برای اطمینان از اینکه به‌درستی حل‌وفصل می‌شود مهم است. با پایان دادن صحیح به توابع، می‌توانید از هزینه‌های اضافی توابعی که بیش‌از حد طولانی اجرا می‌شوند یا بی‌نهایت حلقه می‌زنند جلوگیری کنید. همچنین، می‌توانید مطمئن شوید که نمونه Cloud Functions که تابع شما را اجرا می‌کند قبل‌از اینکه تابع شما با موفقیت به وضعیت یا شرط پایان خود برسد خاموش نمی‌شود.

از این رویکردهای توصیه‌شده برای مدیریت چرخه حیات کارکردهای خود استفاده کنید:

  • توابعی را که پردازش ناهم‌زمان انجام می‌دهند (که به‌عنوان «توابع پس‌زمینه‌ای» نیز شناخته می‌شوند) با برگرداندن وعده جاوا اسکریپت حل‌وفصل کنید.
  • توابع HTTP را با res.redirect()، res.send()، یا res.end() خاتمه دهید.
  • تابع هم‌زمان را با گزاره return; خاتمه دهید.

ساده کردن کد ناهم‌زمان با وعده‌های جاوا اسکریپت

«وعده‌ها» جایگزینی مدرن برای «بازخوان‌ها» در کد ناهمگام هستند. وعده نشان‌دهنده عملیات و مقدار آینده‌ای است که ممکن است برگرداند. همچنین به شما امکان می‌دهد خطاهایی مشابه try/catch در کد هم‌زمان منتشر کنید. می‌توانید درباره وعده‌ها در کیت توسعه نرم‌افزار Firebase در وبلاگ Firebase، و وعده‌ها به‌طور کلی در MDN بخوانید.

نحوه عملکرد وعده‌ها با توابع

وقتی یک وعده JavaScript را به تابعی برمی‌گردانید، آن تابع تا زمانی که وعده حل‌وفصل یا رد شود به اجرا ادامه می‌دهد. برای نشان دادن اینکه یک تابع کار خود را باموفقیت تکمیل کرده است، باید وعده حل شود. برای نشان دادن خطا، قول باید رد شود. این یعنی فقط باید خطاهایی را که می‌خواهید مدیریت کنید.

کد زیر 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 نمونه‌های کد ما شامل نمونه‌هایی از پایان صحیح تابع است. در اینجا چند مورد که نشان‌دهنده موارد معمول هستند آورده شده است: