مدیریت چرخه حیات تابع برای اطمینان از حل شدن صحیح آن مهم است. با خاتمه دادن صحیح به توابع، میتوانید از هزینههای اضافی ناشی از توابعی که برای مدت طولانی اجرا میشوند یا بهطور نامحدود تکرار میشوند جلوگیری کنید. همچنین، میتوانید مطمئن شوید که نمونه Cloud Functions که تابع شما را اجرا میکند قبلاز اینکه تابع شما با موفقیت به شرایط یا وضعیت پایانی خود برسد، خاموش نشود.
از این رویکردهای توصیهشده برای مدیریت چرخه حیات توابع خود استفاده کنید:
- توابعی را که پردازش ناهمگام انجام میدهند (بهعنوان «توابع پسزمینه» نیز شناخته میشوند) با برگرداندن JavaScript promise حل کنید.
- توابع HTTP را با
res.redirect()،res.send()، یاres.end()خاتمه دهید. - تابع همگام را با عبارت
return;خاتمه دهید.
ساده کردن کد ناهمگام با JavaScript promises
Promises جایگزینی مدرن برای فراخوانیهای برگشتی برای کد ناهمگام است. یک promise نشاندهنده یک عملیات و مقدار آتی است که ممکن است برگرداند. همچنین به شما امکان میدهد خطاها را مشابه try/catch در کد همگام انتشار دهید. میتوانید درباره قولها در کیت توسعه نرمافزار Firebase در وبلاگ Firebase، و بهطور کلی درباره قولها در MDN بخوانید.
نحوه کارکرد وعدهها با توابع
وقتی یک JavaScript promise را به تابع برمیگردانید، آن تابع تا زمانی که promise حل یا رد شود به اجرا ادامه میدهد. برای نشان دادن اینکه تابع کار خود را با موفقیت تکمیل کرده است، باید 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 که با تغییر مسیر دنبال میشود
- راهانداز
فضای ذخیرهسازی ابری:
بارگیری فضای ذخیرهسازی بهدنبال
then - وبقلاب در پایگاه داده بیدرنگ
نوشتن:
خطایی که در عبارت
thenایجاد شده است - حذف دورهای حسابهای استفادهنشده: وعده ردشده