Перепишите, используя async/await
Перепишите один из примеров раздела Цепочка промисов, используя async/await вместо .then/catch:
function loadJson(url) {
return fetch(url)
.then(response => {
if (response.status == 200) {
return response.json();
} else {
throw new Error(response.status);
}
})
}
loadJson('no-such-user.json') // (3)
.catch(alert); // Error: 404
Комментарии к решению под кодом:
async function loadJson(url) { // (1)
let response = await fetch(url); // (2)
if (response.status == 200) {
let json = await response.json(); // (3)
return json;
}
throw new Error(response.status);
}
loadJson('no-such-user.json')
.catch(alert); // Error: 404 (4)
Комментарии:
-
Функция
loadJsonтеперь асинхронная. -
Все
.thenвнутри неё заменены наawait. -
Можно было бы просто вернуть промис во внешний код
return response.json(), вот так:if (response.status == 200) { return response.json(); // (3) }Тогда внешнему коду пришлось бы получать результат промиса самостоятельно (через
.thenилиawait). В нашем варианте это не обязательно. -
Выброшенная из
loadJsonошибка перехватывается с помощью.catch. Здесь нельзя использоватьawait loadJson(…), так как мы находимся не в теле функцииasync.