জাভাস্ক্রিপ্টে প্রমিস চেইনে এক্সেপশন হ্যান্ডলিং
কোনো কারণে আমাদের প্রমিস ত্রুটির সাথে শেষ হলে:
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
reject('error');
}, 3000);
});
এই ক্ষেত্রে, কোড的执行 অবিলম্বে চলে যাবে
সেই then-এ, যেখানে একটি ত্রুটি হ্যান্ডলার ফাংশন
আছে, অথবা প্রথম catch-এ, যেটা
প্রথমে পাওয়া যায়।
প্রথম পরিস্থিতির একটি উদাহরণ এখানে দেওয়া হল:
promise.then(
function(result) {
return result + '1';
}
).then(
function(result) {
return result + '2';
},
function(error) {
// execution immediately jumps here
}
).then(
function(result) {
console.log(result);
}
);
দ্বিতীয় পরিস্থিতির একটি উদাহরণ এখানে দেওয়া হল:
promise.then(
function(result) {
return result + '1';
}
).then(
function(result) {
return result + '2';
}
).catch(
function(error) {
// execution immediately jumps here
}
).then(
function(result) {
console.log(result);
}
);
হ্যান্ডলার ফাংশনের দুটি বিকল্প কর্ম রয়েছে:
যদি এটি ব্যতিক্রমী পরিস্থিতি সামলাতে পারে,
তাহলে return এর মাধ্যমে ফলাফল ফেরত দিতে পারে
এবং কার্যক্রম চেইন বরাবর আরও এগিয়ে চলবে।
আর যদি এটি ত্রুটি সামলাতে না পারে, তাহলে
হয় কিছু ফেরত দিতে পারে না, অথবা throw এর মাধ্যমে একটি ব্যতিক্রম নিক্ষেপ করতে পারে
। এই ক্ষেত্রে, কার্যক্রম চলে যাবে
পরবর্তী ত্রুটি ক্যাচারে
(then বা catch - যেটা আগে পাওয়া যায়)।
সাধারণত, চেইনের সমস্ত ত্রুটি একটি জায়গায় ক্যাচ করা হয়
: চেইনের শেষে একটি
catch স্থাপন করা হয়:
promise.then(
function(result) {
return result + '1';
}
).then(
function(result) {
return result + '2';
}
).catch(
function(error) {
// error হলে এখানে আসবে
}
);
এক্ষেত্রে ব্যতিক্রমটি ঘটতে পারে প্রমিসে নিজেই,
অথবা চেইনের যেকোনো লিঙ্কে throw এর মাধ্যমে
নিক্ষিপ্ত হতে পারে:
promise.then(
function(result) {
return result + '1';
}
).then(
function(result) {
if (সবকিছু ঠিক আছে) {
return result + '2';
} else {
throw new Error('ত্রুটি'); // নিকটতম ক্যাচারে যাও
}
}
)
.then(
function(result) {
return result + '3';
}
).catch(
function(error) {
// নিকটতম ক্যাচার
}
);
মনে রাখবেন, catch এর প্রয়োজন ঠিক
ত্রুটি নির্ণয়ের জন্য: এটি সমাধানযোগ্য কি না।
যদি ত্রুটি সমাধানযোগ্য হয়, তাহলে catch কে
এর সমাধান পরবর্তী then-এ পাঠাতে হবে।
আর যদি অসমাধানযোগ্য হয় (বা এই catch
সহজভাবে জানে না কিভাবে এটি সমাধান করতে হয়), তাহলে আমাদের
হয় কিছু ফেরত দিতে হবে না বা একটি ব্যতিক্রম নিক্ষেপ করতে হবে:
promise.then(
function(result) {
return result + '1';
}
).then(
function(result) {
return result + '2';
}
).catch(
function(error) {
if (ত্রুটিসমাধানযোগ্য) {
return 'ডেটা'; // পরবর্তী then এ পাঠাও
} else {
// কিছু ফেরত দিও না বা ব্যতিক্রম নিক্ষেপ করো
}
}
).then(
function(result) {
// এখানে ত্রুটির সমাধান করো
}
);