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