মূল কন্টেন্টে যান
মডিউল 8 · 4-এর পাঠ 4কোর্সে 32/32~15 min
মডিউল পাঠ (4/4)

চ্যালেঞ্জ: প্রতিশ্রুতি সঙ্গে সময়সূচী

"শিডিউলিং" মানে কিভাবে অ্যাসিঙ্ক টাস্কগুলির একটি তালিকা চালাতে হয় সিদ্ধান্ত নেওয়া: সব একসাথে, এক সময়ে, বা ছোট দলে। আমরা Promise.all, for await, এবং বন্ধগুলি একত্রিত করব৷

সমান্তরালভাবে: সব একসাথে

যখন কাজগুলি স্বাধীন এবং দ্রুত হয়, তখন সেগুলি সব চালু করুন এবং Promise.all এর সাথে অপেক্ষা করুন:

JS
async function inParallelo(tasks) {
  return Promise.all(tasks.map((t) => t()));
}

const risultati = await inParallelo([
  () => Promise.resolve(1),
  () => Promise.resolve(2),
  () => Promise.resolve(3),
]);
// [1, 2, 3]

সবচেয়ে ধীর টাস্কের মোট সময় ≈ সময়।

সিরিজে: একবারে এক

যখন প্রতিটি কাজ আগেরটির উপর নির্ভর করে, অথবা আপনি রেট-সীমাবদ্ধ করতে চান:

JS
async function inSerie(tasks) {
  const risultati = [];
  for (const t of tasks) {
    risultati.push(await t());
  }
  return risultati;
}

সময়ের মোট সময় ≈ সমষ্টি।

একযোগে সীমা সহ

কখনও কখনও আপনি এক হাজার একযোগে অনুরোধ চান না, কিন্তু আপনি তাদের জন্য অপেক্ষা করতে চান না সিরিজ হয়: আপনি একটি ফ্লাইটে সর্বাধিক N চান।

JS
async function conLimite(tasks, n) {
  const risultati = new Array(tasks.length);
  let i = 0;
  async function worker() {
    while (i < tasks.length) {
      const mio = i++;
      risultati[mio] = await tasks[mio]();
    }
  }
  await Promise.all(Array.from({ length: n }, worker));
  return risultati;
}

ধারণা: আপনি n "শ্রমিক" লঞ্চ করেন যা পরবর্তী সূচী দখল করে যতক্ষণ না কিছুই অবশিষ্ট থাকে।

চেষ্টা করে দেখুন

ব্যায়াম#js.m8.l4.e1
প্রচেষ্টা: 0লোড হচ্ছে...

`inSeries(tasks)` async সংজ্ঞায়িত করুন: প্রতিশ্রুতি প্রদানকারী ফাংশনগুলির একটি বিন্যাস দেওয়া হয়েছে, সেগুলিকে একবারে চালান (অপেক্ষা করুন) এবং কার্যকরী ক্রমে ফলাফলের বিন্যাস ফেরত দিন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

জন্য ... এর এবং ধাক্কা (অপেক্ষা করুন t())

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম পর্যালোচনা করুন

ব্যায়াম#js.m8.l4.e2
প্রচেষ্টা: 0লোড হচ্ছে...

`inParallel(tasks)` async সংজ্ঞায়িত করুন: প্রতিশ্রুতি প্রদানকারী ফাংশনগুলির একটি অ্যারে দেওয়া, সেগুলিকে সমান্তরালভাবে চালু করুন এবং ইনপুটের মতো একই ক্রমে ফলাফলের অ্যারে ফিরিয়ে দিন। Promise.all ব্যবহার করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

Promise.all(tasks.map((t) => t()))

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ