এখানে গুরুত্বপূর্ণ জিনিস
উভয় then
এবং catch
ফাংশনগুলি নতুন প্রতিশ্রুতি দেয় return
হয় নিক্ষেপ বা স্পষ্টভাবে প্রত্যাখ্যান, বর্তমান প্রতিশ্রুতি প্রত্যাখাত রাজ্যে সরানো হবে।
যেহেতু then
এবং catch
নতুন প্রতিশ্রুতি অবজেক্টগুলি ফিরিয়ে দেয়, সেগুলি বেঁধে রাখা যায়।
যদি আপনি কোনও প্রতিশ্রুতি হ্যান্ডলার ( then
বা catch
) এর ভিতরে ফেলে দেন বা প্রত্যাখ্যান করেন তবে এটি পরবর্তী প্রত্যাখ্যানের হাতলটিতে শৃঙ্খলাবদ্ধভাবে নিচে নামানো হবে।
Jender00 দ্বারা উল্লিখিত হিসাবে, then
এবং catch
হ্যান্ডলারগুলি একযোগে কার্যকর করা হয় না। যখন কোনও হ্যান্ডলার ছুড়ে দেয় তখন তা অবিলম্বে শেষ হয়ে যাবে। সুতরাং, স্ট্যাকটি অযৌক্তিক হবে এবং ব্যতিক্রমটি হারিয়ে যাবে। সে কারণেই একটি ব্যতিক্রম ছোঁড়া বর্তমান প্রতিশ্রুতি প্রত্যাখ্যান করে।
আপনার ক্ষেত্রে, আপনি do1
কোনও Error
বস্তু নিক্ষেপ করে ভিতরে প্রত্যাখ্যান করছেন । এখন, বর্তমান প্রতিশ্রুতি প্রত্যাখ্যাত অবস্থায় থাকবে এবং নিয়ন্ত্রণটি পরবর্তী হ্যান্ডলারের কাছে স্থানান্তরিত হবে, যা then
আমাদের ক্ষেত্রে।
যেহেতু then
হ্যান্ডলারের একটি প্রত্যাখ্যান হ্যান্ডলার নেই, তাই do2
একেবারেই কার্যকর করা হবে না। আপনি console.log
এটির ভিতরে এটি ব্যবহার করে নিশ্চিত করতে পারেন । যেহেতু বর্তমান প্রতিশ্রুতিতে একটি প্রত্যাখ্যান হ্যান্ডলার নেই, এটি পূর্ববর্তী প্রতিশ্রুতি থেকে প্রত্যাখ্যান মান সহও প্রত্যাখ্যাত হবে এবং নিয়ন্ত্রণটি পরবর্তী হ্যান্ডলারের কাছে স্থানান্তরিত হবে যা catch
।
catch
যেমন একটি প্রত্যাখ্যান হ্যান্ডলার হিসাবে , আপনি যখন console.log(err.stack);
এটির অভ্যন্তরীণ কাজ করেন, আপনি ত্রুটি স্ট্যাকের ট্রেস দেখতে সক্ষম হন। এখন, আপনি Error
এটি থেকে কোনও বস্তু নিক্ষেপ করছেন তাই প্রদত্ত প্রতিশ্রুতিও catch
প্রত্যাখ্যাত অবস্থায় থাকবে।
যেহেতু আপনি কোনও প্রত্যাখ্যান হ্যান্ডলারটিকে সংযুক্ত করেননি catch
, তাই আপনি প্রত্যাখ্যানটি পর্যবেক্ষণ করতে পারবেন না।
আপনি চেইনটি বিভক্ত করতে পারেন এবং এটি আরও ভাল করে বুঝতে পারেন
var promise = do1().then(do2);
var promise1 = promise.catch(function (err) {
console.log("Promise", promise);
throw err;
});
promise1.catch(function (err) {
console.log("Promise1", promise1);
});
আউটপুট আপনি পাবেন কিছু হবে
Promise Promise { <rejected> [Error: do1] }
Promise1 Promise { <rejected> [Error: do1] }
ইনসাইড catch
হ্যান্ডলার 1, তোমাদের মধ্যে মান পাচ্ছেন promise
অবজেক্ট হিসেবে প্রত্যাখ্যাত।
একইভাবে, catch
হ্যান্ডলার 1 দ্বারা প্রদত্ত প্রতিশ্রুতিও একই ত্রুটির সাথে promise
প্রত্যাখ্যান করা হয়েছিল যা দিয়ে প্রত্যাখ্যাত হয়েছিল এবং আমরা দ্বিতীয় catch
হ্যান্ডলারে এটি পর্যবেক্ষণ করছি ।
.catch(…)
।