en.javascript.info/6-async/04-promise-api/02-promise-errors-as-results-2/task.md
Ilya Kantor 455d300d8d renames
2017-05-25 11:56:32 +03:00

1.3 KiB

Fault-tolerant fetch with JSON

Improve the solution of the previous task info:task/promise-errors-as-results. Now we need not just to call fetch, but to load the JSON objects from given URLs.

Here's the example code to do that:

let urls = [
  'https://api.github.com/users/iliakan',
  'https://api.github.com/users/remy',
  'https://api.github.com/users/jeresig'
];

// make fetch requests
Promise.all(urls.map(url => fetch(url)))
  // map each response to response.json()
  .then(responses => Promise.all(
    responses.map(r => r.json())
  ))
  // show name of each user
  .then(users => {  // (*)
    for(let user of users) {
      alert(user.name);
    }
  });

The problem is that if any of requests fails, then Promise.all rejects with the error, and we loose results of all the other requests. So the code above is not fault-tolerant, just like the one in the previous task.

Modify the code so that the array in the line (*) would include parsed JSON for successful requests and error for errored ones.

Please note that the error may occur both in fetch (if the network request fails) and in response.json() (if the response is invalid JSON). In both cases the error should become a member of the results object.

The sandbox has both of these cases.