torna alle lezioni

Rewrite using async/await

Rewrite this example code from the chapter Concatenamento di promise (promise chaining) using async/await instead of .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')
  .catch(alert); // Error: 404

Le note sono sotto il codice:

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)

Note:

  1. La funzione loadJson diventa async.

  2. Tutti i .then interni sono sostituiti con await.

  3. Possiamo ritornare response.json() invece di aspettarlo (awaiting for it), come qui:

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

    Poi il codice esterno avrebbe dovuto attendere (await) che la promise risolvesse. Nel nostro caso non è importante.

  4. L’errore sollevato da loadJson è gestito da .catch. Non possiamo usare await loadJson(…) qui, perchè non siamo in una funzione async.