এমডিএন বলছে for await...of
দুটি ব্যবহারের ক্ষেত্রে রয়েছে:
for await...of
বিবৃতি ASYNC iterable সেইসাথে সিঙ্ক iterables বস্তু একটি লুপ উপর iterating সৃষ্টি, ...
আমি পূর্বে সম্পর্কে সচেতন ছিলাম: অ্যাসিঙ্ক পুনরায় ব্যবহারযোগ্য Symbol.asyncIterator
। কিন্তু আমি এখনকালে সুসংগত পুনরাবৃত্তিতে আগ্রহী।
নিম্নলিখিত কোডটি একটি সিঙ্ক্রোনাস পুনরাবৃত্তির মাধ্যমে পুনরাবৃত্তি করে - প্রতিশ্রুতির একটি অ্যারে। এটি প্রতিটি প্রতিশ্রুতি পূরণে প্রজাদের অবরুদ্ধ করে।
async function asyncFunction() {
try {
const happy = new Promise((resolve)=>setTimeout(()=>resolve('happy'), 1000))
const sad = new Promise((_,reject)=>setTimeout(()=>reject('sad')))
const promises = [happy, sad]
for await(const item of promises) {
console.log(item)
}
} catch (err) {
console.log(`an error occurred:`, err)
}
}
asyncFunction() // "happy, an error occurred: sad" (printed in quick succession, after about 5 seconds)
আচরণটি প্রতিটি প্রতিশ্রুতি-প্রত্যাবর্তনের জন্য প্রত্যাশার অনুরূপ বলে মনে হচ্ছে, নীচে দেখানো যুক্তি অনুসারে। এই দাবিটি কি সঠিক?
আমি জিজ্ঞাসা করি কারণ কোডটির এই প্যাটার্নটিতে একটি অন্তর্নিহিত অস্বীকৃতি তারের আপের ক্ষতি রয়েছে যা এড়ানো Promise.all
এবং Promise.allSettled
এড়ানোর জন্য এবং এটি আমার কাছে অবাক লাগে যে এই প্যাটার্নটি ভাষা দ্বারা স্পষ্টভাবে সমর্থন করবে।
for await... of
সিঙ্ক্রোনাস পুনরাবৃত্তের সাথে আমার বিবরণটি কি সঠিক, এবং যদি তাই হয়, তবে কী সেই প্যাটার্নটি অনিচ্ছাকৃত প্রত্যাখ্যান ত্রুটিগুলি নির্গত করতে পারে?