javascript - অ্যাসিঙ্ক প্রতিশ্রুতি কার্যকরকারী কার্যকারিতা থেকে ত্রুটি ফেলে দেওয়া যায় না



node.js promise (1)

নিম্নলিখিত কোডটি কেন ছাঁটাই করে না তা সম্পর্কে একটি ধারণামূলক বোঝার চেষ্টা করার চেষ্টা করছি। আপনি যদি new Promise(async (resolve, ... অংশ) থেকে async কীওয়ার্ডটি সরিয়ে থাকেন তবে এটি ঠিক কাজ করে, সুতরাং এটি প্রতিশ্রুতি দেওয়া হয় যে অ্যাসিঙ্ক কার্যকারিতা একটি অ্যাসিঙ্ক ফাংশন।

(async function() {

  try {
    await fn();
  } catch(e) {
    console.log("CAUGHT fn error -->",e)
  }

})();

function fn() {

  return new Promise(async (resolve, reject) => {
    // ...
    throw new Error("<<fn error>>");
    // ...
  });

}

উত্তরগুলি here , here এবং here পুনরাবৃত্তি করে যে "আপনি যদি অন্য কোনও অ্যাসিনক্রোনাস কলব্যাকে থাকেন তবে আপনাকে অবশ্যই reject " ব্যবহার করতে হবে, তবে "অ্যাসিনক্রোনাস" দ্বারা তারা অ্যাসিঙ্ক ফাংশনগুলিকে উল্লেখ করছে না, তাই আমি মনে করি না যে তাদের ব্যাখ্যাগুলি প্রয়োগ হয়েছে এখানে (এবং যদি তারা করেন তবে আমি বুঝতে পারি না)।

যদি throw পরিবর্তে আমরা reject করি তবে উপরের কোডটি ঠিকঠাক কাজ করে। আমি বুঝতে চাই, মূলত , কেন এখানে throw কাজ করে না। ধন্যবাদ!


এটি Promise কনস্ট্রাক্টর অ্যান্টিপ্যাটার্নের অ্যাসিঙ্ক / অপেক্ষার সংস্করণ!

Promise নির্বাহক async function হিসাবে Never কোনও async function ব্যবহার করবেন Never (এমনকি আপনি এটি 1 টি কাজ করতে পারেন এমন সময়ও) !

[1: return এবং throw স্টেটমেন্ট ব্যবহার না করে resolve কল করুন এবং reject করে]

"অ্যাসিঙ্ক্রোনাস" দ্বারা তারা অ্যাসিঙ্ক ফাংশনগুলিকে উল্লেখ করছে না, তাই আমি এখানে তাদের ব্যাখ্যাগুলি প্রযোজ্য বলে মনে করি না

তারা পাশাপাশি পারে। এটি কাজ করতে পারে না যেখানে একটি সাধারণ উদাহরণ

new Promise(async function() {
    await delay(…);
    throw new Error(…);
})

যা সমান

new Promise(function() {
    return delay(…).then(function() {
        throw new Error(…);
    });
})

যেখানে এটি এখন স্পষ্ট যে নিক্ষেপটি একটি অ্যাসিনক্রোনাস কলব্যাকের অভ্যন্তরে।

Promise নির্মাণকারী কেবল সিঙ্ক্রোনাস ব্যতিক্রমগুলি ধরতে পারে এবং একটি async function কখনই ছুঁড়ে না ফেলে - এটি সর্বদা একটি প্রতিশ্রুতি দেয় (যা যদিও প্রত্যাখ্যান হতে পারে)। প্রতিশ্রুতি ডাকার জন্য অপেক্ষা করার কারণে এবং সেই প্রত্যাবর্তনের মানটিকে অগ্রাহ্য করা হবে।





async-await