Přepište za použití async/await
Přepište tento příklad kódu z kapitoly Zřetězení příslibů za použití async/await namísto .then/catch:
function načtiJson(url) {
return fetch(url)
.then(odpověď => {
if (odpověď.status == 200) {
return odpověď.json();
} else {
throw new Error(odpověď.status);
}
});
}
načtiJson('https://javascript.info/takovy-uzivatel-neni.json')
.catch(alert); // Chyba: 404
Poznámky jsou pod kódem:
async function načtiJson(url) { // (1)
let odpověď = await fetch(url); // (2)
if (odpověď.status == 200) {
let json = await odpověď.json(); // (3)
return json;
}
throw new Error(odpověď.status);
}
načtiJson('https://javascript.info/takovy-uzivatel-neni.json')
.catch(alert); // Chyba: 404 (4)
Poznámky:
-
Funkce
načtiJsonse stává asynchronní (async). -
Všechna
.thenuvnitř jsou nahrazena zaawait. -
Můžeme vrátit
return odpověď.json()místo čekání na tuto funkci, například:if (odpověď.status == 200) { return odpověď.json(); // (3) }Pak by vnější kód musel počkat pomocí
await, než se tento příslib vyhodnotí. V našem případě na tom nezáleží. -
Chyba vyvolaná z
načtiJsonje ošetřena pomocí.catch. Nemůžeme zde použítawait načtiJson(…), protože nejsme uvnitř funkce sasync.