মডিউল পাঠ (4/4)
চ্যালেঞ্জ: প্রতিশ্রুতি সঙ্গে সময়সূচী
"শিডিউলিং" মানে কিভাবে অ্যাসিঙ্ক টাস্কগুলির একটি তালিকা চালাতে হয় সিদ্ধান্ত নেওয়া: সব একসাথে, এক সময়ে,
বা ছোট দলে। আমরা Promise.all, for await, এবং বন্ধগুলি একত্রিত করব৷
সমান্তরালভাবে: সব একসাথে
যখন কাজগুলি স্বাধীন এবং দ্রুত হয়, তখন সেগুলি সব চালু করুন এবং Promise.all এর সাথে অপেক্ষা করুন:
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]সবচেয়ে ধীর টাস্কের মোট সময় ≈ সময়।
সিরিজে: একবারে এক
যখন প্রতিটি কাজ আগেরটির উপর নির্ভর করে, অথবা আপনি রেট-সীমাবদ্ধ করতে চান:
async function inSerie(tasks) {
const risultati = [];
for (const t of tasks) {
risultati.push(await t());
}
return risultati;
}সময়ের মোট সময় ≈ সমষ্টি।
একযোগে সীমা সহ
কখনও কখনও আপনি এক হাজার একযোগে অনুরোধ চান না, কিন্তু আপনি তাদের জন্য অপেক্ষা করতে চান না সিরিজ হয়: আপনি একটি ফ্লাইটে সর্বাধিক N চান।
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 "শ্রমিক" লঞ্চ করেন যা পরবর্তী সূচী দখল করে যতক্ষণ না কিছুই অবশিষ্ট থাকে।
চেষ্টা করে দেখুন
`inSeries(tasks)` async সংজ্ঞায়িত করুন: প্রতিশ্রুতি প্রদানকারী ফাংশনগুলির একটি বিন্যাস দেওয়া হয়েছে, সেগুলিকে একবারে চালান (অপেক্ষা করুন) এবং কার্যকরী ক্রমে ফলাফলের বিন্যাস ফেরত দিন।
ইঙ্গিত দেখান
জন্য ... এর এবং ধাক্কা (অপেক্ষা করুন t())
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
ব্যায়াম পর্যালোচনা করুন
`inParallel(tasks)` async সংজ্ঞায়িত করুন: প্রতিশ্রুতি প্রদানকারী ফাংশনগুলির একটি অ্যারে দেওয়া, সেগুলিকে সমান্তরালভাবে চালু করুন এবং ইনপুটের মতো একই ক্রমে ফলাফলের অ্যারে ফিরিয়ে দিন। Promise.all ব্যবহার করুন।
ইঙ্গিত দেখান
Promise.all(tasks.map((t) => t()))
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ