আপনি প্রতিশ্রুতিবদ্ধ কনস্ট্রাক্টর এক্সিকিউটর ফাংশনের অভ্যন্তরে প্রতিশ্রুতি কার্যকরভাবে ব্যবহার করছেন, সুতরাং এটি প্রতিশ্রুতিবদ্ধ কনস্ট্রাক্টর অ্যান্টি-প্যাটার্ন ।
আপনার কোডটি মূল ঝুঁকির একটি ভাল উদাহরণ: সমস্ত ত্রুটিগুলি নিরাপদে প্রচার না করে। কেন সেখানে পড়ুন ।
তদ্ব্যতীত async/ এর ব্যবহার awaitএকই ফাঁদগুলিকে আরও অবাক করে তোলে। তুলনা করা:
let p = new Promise(resolve => {
""();
resolve();
});
(async () => {
await p;
})().catch(e => console.log("Caught: " + e));
একটি নিষ্পাপ (ভুল) asyncসমতুল্য:
let p = new Promise(async resolve => {
""();
resolve();
});
(async () => {
await p;
})().catch(e => console.log("Caught: " + e));
আপনার ব্রাউজারের ওয়েব কনসোলটি সর্বশেষের জন্য দেখুন।
প্রথমটি কাজ করে কারণ প্রতিশ্রুতিবদ্ধ কনস্ট্রাক্টর এক্সিকিউটর ফাংশনে যে কোনও তাত্ক্ষণিক ব্যতিক্রম সুনির্দিষ্টভাবে নবনির্মিত প্রতিশ্রুতি প্রত্যাখ্যান করে (তবে কোনওটির ভিতরে .thenআপনি নিজেরাই আছেন)।
দ্বিতীয়টি কাজ করে না কারণ কোনও asyncফাংশনে কোনও তাত্ক্ষণিক ব্যতিক্রম নিজেই ফাংশন দ্বারা প্রত্যাবর্তিত প্রতিশ্রুতিasync প্রত্যাখ্যান করে ।
যেহেতু কোনও প্রতিশ্রুতি প্রদানকারী নির্বাহকের ফাংশনের রিটার্ন মান অব্যবহৃত, এটি খারাপ খবর!
তোমার গোপন সংকেত
কোন কারণে আপনি সংজ্ঞায়িত না পারে myFunctionযেমন async:
async function myFunction() {
let array = await getAsyncArray();
return new Promise((resolve, reject) => {
eachLimit(array, 500, (item, callback) => {
}, error => {
if (error) return reject(error);
});
});
}
তবুও কেন আপনি যখন পুরানো সম্মতি নিয়ন্ত্রণ লাইব্রেরি ব্যবহার করবেন await?