回到课程
本资料仅提供以下语言版本:English, Русский。请 帮助我们 将其翻译为 简体中文 版本。

用 JSON fetch 的容错处理

改进之前 容错机制 Promise.all 任务的解决方案。我们现在只需要调用 fetch,但要从给定的 URL 中加载 JSON。

这是改进后的代码:

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);
    }
  });

问题是如果任意请求都失败了,那么 Promise.all 就会 reject error,而且会丢失其他所有请求的结果。因此上述代码不易于容错,与上一个任务相同。

请修改代码后,保证 (*) 的数组中包含请求成功解析后的 JSON 和错误的 JSON。

请注意,错误可能同时发生在 fetch(如果请求失败)和 response.json()(如果响应的是无效 JSON)中。在这两种情况下,错误都会成为结果对象的成员。

这两种情况沙箱都有。

打开一个任务沙箱。