من المهم إدارة دورة حياة الدالة لضمان حلّها بشكلٍ سليم. من خلال إنهاء الدوال بشكلٍ صحيح، يمكنك تجنُّب الرسوم المفرطة من الدوال التي يتم تشغيلها لفترة طويلة جدًا أو التي تتكرّر بشكلٍ لا نهائي. يمكنك أيضًا التأكّد من أنّ مثيل Cloud Functionsالذي يشغّل دالتك لا يتم إيقافه قبل أن تصل دالتك بنجاح إلى حالة الإنهاء أو الشرط الذي يؤدي إلى إنهاءها.
استخدِم هذه الطرق المقترَحة لإدارة دورة حياة الدوال:
- يمكنك حلّ الدوال التي تنفّذ معالجة غير متزامنة (تُعرف أيضًا باسم "دوال الخلفية") من خلال عرض وعد JavaScript promise.
- يمكنك إنهاء دوال HTTP باستخدام
res.redirect()أوres.send()أوres.end(). - يمكنك إنهاء دالة متزامنة باستخدام عبارة
return;.
تبسيط الرمز غير المتزامن باستخدام وعود JavaScript
الوعود هي بديل حديث لعمليات رد الاتصال للرمز غير المتزامن. يمثّل الوعد عملية والقيمة المستقبلية التي قد يعرضها. يسمح لك أيضًا بنشر الأخطاء بشكلٍ مشابه لعبارتَي try/catch في الرمز المتزامن. يمكنك الاطّلاع على مزيد من المعلومات عن الوعود في حزمة Firebase SDK على مدونة 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 Cloud Functions أمثلة على الإنهاء السليم للدوال. في ما يلي بعض الأمثلة التي توضّح الحالات النموذجية:
- مشغّل قاعدة بيانات الوقت الفعلي: دالة HTTP متبوعة بعملية إعادة توجيه
- مشغّل Cloud Storage
: عملية تنزيل من مساحة التخزين متبوعة بـ
then - إشعار على الويب عند الكتابة في Realtime Database
:
يتم عرض خطأ داخل عبارة
then - حذف الحسابات غير المستخدَمة بشكلٍ دوري: عمليّة غير مكتملة