المزامنة وعدم المزامنة والحصول على وعود

من المهم إدارة مراحل نشاط الدالة لضمان حلّها بشكل صحيح. من خلال إنهاء الدوال بشكل صحيح، يمكنك تجنُّب الرسوم الزائدة الناتجة عن الدوال التي تعمل لفترة طويلة جدًا أو التي تتكرر بشكل لا نهائي. يمكنك أيضًا التأكّد من أنّ مثيل Cloud Functions الذي يشغّل الدالة لا يتوقف عن العمل قبل أن تصل الدالة بنجاح إلى حالة الإنهاء.

استخدِم هذه الطرق المقترَحة لإدارة مراحل نشاط الدوال:

  • يمكنك حلّ الدوال التي تنفّذ معالجة غير متزامنة (تُعرف أيضًا باسم "دوال الخلفية") من خلال عرض JavaScript promise.
  • يمكنك إنهاء دوال HTTP باستخدام res.redirect() أو res.send() أو res.end().
  • يمكنك إنهاء دالة متزامنة باستخدام عبارة return;.

تبسيط الرموز البرمجية غير المتزامنة باستخدام كائنات JavaScript Promise

تُعدّ الوعود بديلاً حديثًا لعمليات الاستدعاء للرمز غير المتزامن. يمثّل الوعد عملية والقيمة المستقبلية التي قد يعرضها. كما تتيح لك نشر الأخطاء المشابهة لـ try/catch في الرمز المتزامن. يمكنك الاطّلاع على مزيد من المعلومات حول الوعود في Firebase SDK على مدوّنة Firebase، وحول الوعود بشكل عام على MDN.

كيفية عمل الوعود مع الدوال

عند إرجاع JavaScript 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 عيّنات التعليمات البرمجية أمثلة على إنهاء الدوال بشكل صحيح. في ما يلي بعض الأمثلة التي توضّح الحالات النموذجية: