async/await を使用して書き直す
チャプター Promise チェーン にある例の1つを .then/catch
の代わりに async/await
を使って書き直してください。:
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
はasync
になります。 -
すべての内側の
.then
はawait
に置き換えられます。 -
次のように、await するのではなく、
response.json()
を返すこともできます。:if (response.status == 200) { return response.json(); // (3) }
そうすると、外側のコードはその promise を解決するために
await
する必要があります。 -
loadJson
からスローされたエラーは.catch
で処理されます。そこではawait loadJson(…)
を使うことができません。なぜならasync
関数の中ではないからです。