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

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

استخدِم الأساليب المقترَحة التالية لإدارة دورة حياة الدوال:

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

تبسيط الرمز غير المتزامن باستخدام الوعود في JavaScript

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

طريقة عمل الوعود مع الدوال

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