Перепишите, используя 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
.