সিঙ্ক, এসিঙ্ক ও প্রমিস

ফাংশনের লাইফসাইকেল ম্যানেজ করা গুরুত্বপূর্ণ যাতে এটি সঠিকভাবে সমাধান করা যায়। ফাংশন সঠিকভাবে বন্ধ করলে, আপনি অতিরিক্ত চার্জ এড়াতে পারবেন। এই চার্জ সেইসব ফাংশনের জন্য নেওয়া হয় যেগুলি খুব বেশি সময় ধরে চলে বা অসীম লুপে চলে। এছাড়াও, আপনি এটি নিশ্চিত করতে পারেন যে আপনার ফাংশন যে Cloud Functions ইনস্ট্যান্স চালাচ্ছে সেটি আপনার ফাংশন সফলভাবে তার সমাপ্তির কন্ডিশন বা স্টেটে পৌঁছানোর আগে বন্ধ হয়ে যায় না।

আপনার ফাংশনের লাইফসাইকেল ম্যানেজ করতে, সাজেস্ট করা এইসব পদ্ধতি ব্যবহার করুন:

  • অ্যাসিঙ্ক্রোনাস প্রসেসিং (এছাড়াও "ব্যাকগ্রাউন্ড ফাংশন" নামে পরিচিত) পারফর্ম করে এমন ফাংশন রেজোল্ভ করুন, এর জন্য একটি জাভাস্ক্রিপ্ট প্রমিস রিটার্ন করুন।
  • res.redirect(), res.send() বা res.end() ব্যবহার করে HTTP ফাংশন বন্ধ করুন।
  • return; স্টেটমেন্টের মাধ্যমে সিনক্রোনাস ফাংশন বন্ধ করুন।

জাভাস্ক্রিপ্ট প্রমিস ব্যবহার করে অ্যাসিঙ্ক্রোনাস কোড সহজ করা

অ্যাসিঙ্ক্রোনাস কোডের জন্য কলব্যাক ফাংশনের আধুনিক বিকল্প হল প্রমিস। প্রমিস একটি অপারেশন ও ভবিষ্যতে এটি যে ভ্যালু রিটার্ন করতে পারে তা বোঝায়। এছাড়াও, এটি আপনাকে সিঙ্ক্রোনাস কোডে try/catch-এর মতো সমস্যা প্রচার করতে দেয়। আপনি Firebase SDK-তে প্রতিশ্রুতি সম্পর্কে Firebase ব্লগ থেকে এবং সাধারণভাবে প্রতিশ্রুতি সম্পর্কে MDN থেকে জানতে পারবেন।

ফাংশনের সাথে প্রমিস কীভাবে কাজ করে

আপনি কোনও ফাংশনে জাভাস্ক্রিপ্ট প্রমিস রিটার্ন করলে, সেই ফাংশন প্রমিসটি সমাধান বা বাতিল না হওয়া পর্যন্ত চলতে থাকে। কোনও ফাংশন যে তার কাজ সফলভাবে সম্পূর্ণ করেছে তা বোঝাতে, প্রমিসটি সম্পূর্ণ হতে হবে। কোনও সমস্যা হয়েছে তা বোঝাতে, প্রমিস বাতিল করা উচিত। এর অর্থ হল, আপনি শুধুমাত্র সেইসব সমস্যা সমাধান করতে পারবেন যা আপনি চান।

নিচে দেওয়া কোডটি একটি 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 কোড স্যাম্পেলে ফাংশন সঠিকভাবে বন্ধ করার উদাহরণ দেওয়া থাকে। এখানে কয়েকটি উদাহরণ দেওয়া হল যা সাধারণ পরিস্থিতিকে তুলে ধরে: