Visiškas AJAX klaidų perėmimas JavaScript
Pažadas, kurį grąžina fetch,
baigiasi klaida tik tada, kai įvyksta
tinklo klaida. Jei serveris grąžino atsaką
su statusu 404 ar 500,
tada pažadas bus sėkmingai užbaigtas,
bet tuo pačiu statusas ok bus
nustatytas į false.
Perimkime abi klaidų rūšis:
button.addEventListener('click', function() {
let promise = fetch('/ajax.html')
.then(
response => {
if (response.ok) {
return response.text();
} else {
console.log('blogas atsako statusas');
return '';
}
},
).then(
text => {
console.log(text);
}
).catch(
error => {
console.log(error);
}
);
});
Padarykime taip, kad klaida, susijusi
su blogu HTTP atsako statusu, taip pat
būtų perimama bloku catch.
Tam išmeskime ją toliau
naudojant throw:
button.addEventListener('click', function() {
let promise = fetch('/ajax.html')
.then(
response => {
if (response.ok) {
return response.text();
} else {
throw new Error('blogas atsako statusas');
}
},
).then(
text => {
console.log(text);
}
).catch(
error => {
console.log(error);
}
);
});
Išveskite puslapio tekstą, jei užklausa buvo sėkminga, ir klaidą, jei kas nors nutiko ne taip.