Вазъиятҳои истисноӣ дар промисҳо дар JavaScript
Биёед акнун омӯзем, ки чӣ гуна вазъиятҳои истисноиеро, ки дар дохили промис рух додаанд, коркард кунем. Дар сурати ба миён омадани чунин вазъият мо бояд промисро бо истифода аз як функсияи махсуси радкунӣ, ки ба таври худкор ба параметри дуввуми функсияи промис дохил мешавад, рад кунем:
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
...
}, 3000);
});
Дар дохили функсияи промис мо бояд
resolve-ро даъват кунем, агар ҳама чиз ба тарзи оддӣ гузашта бошад, ё
reject-ро, агар вазъияти истисноӣ ба миён омада бошад:
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
let isError = false;
if (!isError) {
resolve([1, 2, 3, 4, 5]); // маълумоти промис
} else {
reject('хато дар промис'); // матни хатои шумо
}
}, 3000);
});
Сипас дар усули then шумо бояд на як, балки ду функсияро
параметрҳо гузоред: якуми он кор мекунад,
агар промис ба тарзи оддӣ кор кунад (resolve шудааст),
ва дуввумӣ - агар бо хато кор кунад (reject шудааст):
promise.then(
function(result) {
console.log(result); // натиҷаи промисро чоп мекунад
},
function(error) {
console.log(error); // матни хаторо чоп мекунад
}
);
Қоидатан, коди дар боло овардашударо ба таври фарогиртар ҳамнависӣ мекунанд, ба ин шакл:
promise.then(function(result) {
console.log(result); // натиҷаи промисро чоп мекунад
}, function(error) {
console.log(error); // матни хаторо чоп мекунад
});
Як коди асинхрониеро созед, ки рақамҳои тасодуфиро
аз 0 то 5 ҳосил мекунад.
Ҳамаи инро дар промис печонед. Бигзор промис натиҷаи худро
ҳамчун натиҷаи тақсими яке ба рақами ҳосилшуда баргардонад.
Бигзор промис бо хато иҷро шавад,
агар тақсим бар сифар рӯй дода бошад, ва бо муваффақият
дар ҳамаи ҳолатҳои дигар.