JavaScript හි පොරොමිස් දාමවල අත්යාවශ්යතා
යම් හේතුවක් නිසා අපගේ පොරොමිසය දෝෂයක් සමඟ අවසන් වේවි:
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) {
// ක්රියාත්මක වීම වහාම මෙහි යොමු වේ
}
).then(
function(result) {
console.log(result);
}
);
දෙවන තත්වයේ උදාහරණය මෙන්න:
promise.then(
function(result) {
return result + '1';
}
).then(
function(result) {
return result + '2';
}
).catch(
function(error) {
// ක්රියාත්මක වීම වහාම මෙහි යොමු වේ
}
).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) {
// දෝෂයක සිදුවීමකදී මෙහි පැමිණෙන්නෙමු
}
);
මෙහිදී ව්යතිරේකය ඇතිවිය හැකිය
පොරොමිසය තුළ, හෝ 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) {
// මෙහිදී දෝෂය විසඳන්න
}
);