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) {
// бул жерде катаны чечебиз
}
);