Array.forEach এই নব্বইটি সরবরাহ করে না (ওহ যদি তা হয় তবে) আপনি যা চান তা অর্জন করার বিভিন্ন উপায় রয়েছে:
একটি সাধারণ কাউন্টার ব্যবহার করে
function callback () { console.log('all done'); }
var itemsProcessed = 0;
[1, 2, 3].forEach((item, index, array) => {
asyncFunction(item, () => {
itemsProcessed++;
if(itemsProcessed === array.length) {
callback();
}
});
});
(@ ভানুয়ান এবং অন্যান্যদের জন্য ধন্যবাদ) এই পদ্ধতির গ্যারান্টি দেয় যে "সম্পন্ন" কলব্যাক শুরু করার আগে সমস্ত আইটেম প্রক্রিয়া করা হবে। আপনার একটি কাউন্টার ব্যবহার করা দরকার যা কলব্যাকে আপডেট হয়। সূচকের প্যারামিটারের মানের উপর নির্ভর করে একই গ্যারান্টি সরবরাহ করে না, কারণ অ্যাসিঙ্ক্রোনাস ক্রিয়াকলাপের ফেরতের আদেশের নিশ্চয়তা নেই।
ES6 প্রতিশ্রুতি ব্যবহার করে
(একটি প্রতিশ্রুতি গ্রন্থাগার পুরানো ব্রাউজারগুলির জন্য ব্যবহার করা যেতে পারে):
সিঙ্ক্রোনাস এক্সিকিউশন গ্যারান্টিযুক্ত সমস্ত অনুরোধগুলি প্রক্রিয়া করুন (উদাহরণস্বরূপ 1 তারপর 2 তারপর 3)
function asyncFunction (item, cb) {
setTimeout(() => {
console.log('done with', item);
cb();
}, 100);
}
let requests = [1, 2, 3].reduce((promiseChain, item) => {
return promiseChain.then(() => new Promise((resolve) => {
asyncFunction(item, resolve);
}));
}, Promise.resolve());
requests.then(() => console.log('done'))
"সিঙ্ক্রোনাস" এক্সিকিউশন ছাড়াই সমস্ত অ্যাসিঙ্ক অনুরোধগুলি প্রক্রিয়া করুন (2 টি 1 এর চেয়ে দ্রুত শেষ করতে পারে)
let requests = [1,2,3].map((item) => {
return new Promise((resolve) => {
asyncFunction(item, resolve);
});
})
Promise.all(requests).then(() => console.log('done'));
একটি অ্যাসিঙ্ক লাইব্রেরি ব্যবহার করা হচ্ছে
অন্যান্য অ্যাসিঙ্ক্রোনাস লাইব্রেরি, হয় ASYNC সবচেয়ে জনপ্রিয় হচ্ছে, যে মেকানিজম কি আপনি চান প্রকাশ করার প্রদান।
সম্পাদন করা
পূর্বের সিঙ্ক্রোনাসের উদাহরণ কোডটি সরিয়ে দিতে প্রশ্নের মূল অংশ সম্পাদনা করা হয়েছে, সুতরাং আমি আমার উত্তরটি পরিষ্কার করতে আপডেট করেছি। আসল উদাহরণটি সিঙ্ক্রোনাসের মতো কোডটি অ্যাসিক্রোনাস আচরণের মডেল করতে ব্যবহৃত হয়েছিল, সুতরাং নিম্নলিখিতটি প্রয়োগ করা হয়েছে:
array.forEachহয় সমকালীন এবং তাই হয় res.write, তাই আপনি কেবল foreach আপনার কল করার পর আপনার কলব্যাক লাগাতে পারেন:
posts.foreach(function(v, i) {
res.write(v + ". index " + i);
});
res.end();
forEachপদ্ধতিতেdoneকলব্যাক প্যারামিটার এবংallDoneকলব্যাক থাকলে এটি দুর্দান্ত হবে!