レッスンに戻る

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)

補足:

  1. 関数 loadJsonasync になります。

  2. すべての内側の .thenawait に置き換えられます。

  3. 次のように、await するのではなく、response.json() を返すこともできます。:

    if (response.status == 200) {
      return response.json(); // (3)
    }

    そうすると、外側のコードはその promise を解決するために await する必要があります。

  4. loadJson からスローされたエラーは .catch で処理されます。そこでは await loadJson(…) を使うことができません。なぜなら async 関数の中ではないからです。