JavaScript-এ async/await এবং লুপ কম্বাইন করে অ্যাসিঙ্ক্রোনাস ফাংশনগুলো ক্রমাগত (সিকোয়েনশিয়ালি) রান করা যায়। প্রতিটি অপারেশন আগেরটি শেষ হওয়ার পর শুরু হয়।
কোড উদাহরণ
async function runIteratively(iterations) {
for (let i = 1; i <= iterations; i++) {
await demo("Call Demo1() - Iteration " + i);
await demo("Call Demo2() - Iteration " + i);
}
}
async function demo(message) {
console.log(message);
// সিমুলেটেড অ্যাসিঙ্ক ওপারেশন (যেমন API কল)
await new Promise(resolve => setTimeout(resolve, 100));
}
// ১০ বার চালান
runIteratively(10);
চলানোর পদ্ধতি
- কোডটি
asyncLoop.jsনামে সংরক্ষণ করুন। - টার্মিনালে চালান:
node asyncLoop.js
আউটপুট
Call Demo1() - Iteration 1
Call Demo2() - Iteration 1
Call Demo1() - Iteration 2
Call Demo2() - Iteration 2
...
Call Demo1() - Iteration 10
Call Demo2() - Iteration 10
প্যারালেল রান (তুলনা)
যদি অপারেশনগুলো স্বতন্ত্র হয়, Promise.all() দিয়ে প্যারালেল করলে দ্রুত হবে:
async function runParallel(iterations) {
const promises = [];
for (let i = 1; i <= iterations; i++) {
promises.push(demo("Demo1 - " + i));
promises.push(demo("Demo2 - " + i));
}
await Promise.all(promises); // সব একসাথে চালু, সব শেষ হওয়ায় কন্টিনিউ
}
এরর হ্যান্ডলিং
async function safeIterativeRun(tasks) {
for (const task of tasks) {
try {
await task();
} catch (error) {
console.error("টাস্ক ফেইল:", error);
// continue বা break নিয়ে সিদ্ধান্ত নিন
}
}
}
ব্যবহার ক্ষেত্র
- ব্যাচ API রিকোয়েস্ট (রেট লিমিট এড়াতে)
- ফাইল প্রসেসিং (এক تلو এক)
- ডেটাবেজ মাইগ্রেশন স্ক্রিপ্ট
- টেস্ট অটোমেশন (সিকোয়েনশিয়াল টেস্ট কেস)
দ্রষ্টব্য
forEachএর সাথেawaitকাজ করে না (for..of ব্যবহার করুন)।- সিকোয়েনশিয়াল = ধীর কিন্তু সুরক্ষিত (রেস কন্ডিশন নেই)।
- প্যারালেল = দ্রুত কিন্তু রিসোর্স বেশি লাগে।