আমার মাথাটি জড়িয়ে ধরে মনে হচ্ছে না কেন এটি কাজ করে না।
কারণ mainএকটি প্রতিশ্রুতি ফেরত; সমস্ত asyncফাংশন না।
শীর্ষ স্তরে, আপনাকে অবশ্যই:
এমন একটি শীর্ষ-স্তরের asyncফাংশন ব্যবহার করুন যা কখনই প্রত্যাখ্যান করে না (যদি না আপনি "অবরুদ্ধ প্রত্যাখ্যান" ত্রুটি না চান), বা
ব্যবহার করুন thenএবং catch, বা
(শীঘ্রই আসছে!) শীর্ষ স্তরেরawait ব্যবহার করুন , এমন একটি প্রস্তাব যা প্রক্রিয়াতে পর্যায় 3 এ পৌঁছেছে যা awaitমডিউলটিতে শীর্ষ স্তরের ব্যবহারের অনুমতি দেয় ।
# 1 - শীর্ষ স্তরের asyncফাংশন যা কখনই প্রত্যাখ্যান করে না
(async () => {
try {
var text = await main();
console.log(text);
} catch (e) {
// Deal with the fact the chain failed
}
})();
লক্ষ্য করুন catch; আপনাকে অবশ্যই প্রতিশ্রুতি প্রত্যাখ্যান / অ্যাসিঙ্ক ব্যতিক্রমগুলি পরিচালনা করতে হবে , যেহেতু অন্য কিছুই হচ্ছে না; তাদের কাছে যাওয়ার জন্য আপনার কাছে কোনও কলার নেই। আপনি যদি পছন্দ করেন তবে catchফাংশনটির মাধ্যমে এটিকে কল করার পরিবর্তে ( সিনট্যাক্সের চেয়ে try/ পরিবর্তে catch) আপনি এটি করতে পারেন:
(async () => {
var text = await main();
console.log(text);
})().catch(e => {
// Deal with the fact the chain failed
});
... যা কিছুটা সংক্ষিপ্ত (আমি সে কারণে এটি পছন্দ করি)।
অথবা, অবশ্যই ত্রুটিগুলি পরিচালনা করবেন না এবং কেবল "অপরিবর্তিত প্রত্যাখ্যান" ত্রুটির অনুমতি দিন।
# 2 - thenএবংcatch
main()
.then(text => {
console.log(text);
})
.catch(err => {
// Deal with the fact the chain failed
});
catchযদি ত্রুটি শৃঙ্খল অথবা আপনার ঘটতে হ্যান্ডলার বলা হবে thenহ্যান্ডলার। (নিশ্চিত হন যে আপনার catchহ্যান্ডলার ত্রুটিগুলি ছুঁড়ে না ফেলে, কারণ সেগুলি হ্যান্ডেল করার জন্য কিছুই নিবন্ধীকৃত নয়))
বা উভয় যুক্তি then:
main().then(
text => {
console.log(text);
},
err => {
// Deal with the fact the chain failed
}
);
আবার খেয়াল করুন আমরা একটি প্রত্যাখ্যান হ্যান্ডলার নিবন্ধভুক্ত করছি। তবে এই ফর্মটিতে, নিশ্চিত হয়ে নিন যে আপনার thenকলব্যাকগুলির কোনওটিই ত্রুটি ছুঁড়ে না ফেলে, এগুলি পরিচালনা করার জন্য কোনও কিছুই নিবন্ধভুক্ত নয়।
awaitএকটি মডিউলে # 3 শীর্ষ স্তরের
আপনি awaitনন-মডিউল স্ক্রিপ্টের শীর্ষ স্তরে ব্যবহার করতে পারবেন না , তবে শীর্ষ স্তরের awaitপ্রস্তাবনা ( পর্যায় 3 ) আপনাকে এটি মডিউলের শীর্ষ স্তরে ব্যবহার করতে দেয়। এটি শীর্ষ স্তরের asyncফাংশন র্যাপার ব্যবহারের অনুরূপ (উপরে # 1) যাতে আপনি চান না যে আপনার শীর্ষ-স্তরের কোডটি প্রত্যাখ্যান করুন (একটি ত্রুটি নিক্ষেপ করুন) কারণ এর ফলে একটি অনিচ্ছাকৃত প্রত্যাখ্যান ত্রুটি হবে। সুতরাং যদি আপনি # 1 এর মতো জিনিসগুলি ভুল হয়ে যায় তখন আপনি এই অনানন্দিত প্রত্যাখ্যান না করতে চাইলে আপনি নিজের কোডটি একটি ত্রুটি হ্যান্ডলারের মধ্যে মোড়াতে চান:
// In a module, once the top-level `await` proposal lands
try {
var text = await main();
console.log(text);
} catch (e) {
// Deal with the fact the chain failed
}
মনে রাখবেন যে আপনি যদি এটি করেন তবে আপনার মডিউল থেকে আমদানি করা কোনও মডিউল আপনার প্রতিশ্রুতি awaitস্থির না হওয়া পর্যন্ত অপেক্ষা করবে ; শীর্ষ-স্তরের ব্যবহার করে মডিউলটি যখন awaitমূল্যায়ন করা হয়, এটি মূলত মডিউল লোডারকে (যেমন কোনও asyncফাংশন করে) প্রতিশ্রুতি দেয়, যা নির্ভর করে যে কোনও মডিউলগুলির উপর নির্ভর করে কোনও মডিউলগুলি মূল্যায়নের আগে সেই প্রতিশ্রুতিটি নিষ্পত্তি না হওয়া পর্যন্ত অপেক্ষা করে।
awaitপ্রতিশ্রুতিthenবাক্য গঠন জন্য চিনির ছাড়া কিছুই নয় ।