এখানে গুরুত্বপূর্ণ জিনিস
উভয় 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(…)।