【问题标题】:Fetch random user API获取随机用户 API
【发布时间】:2021-05-03 13:31:59
【问题描述】:

我正在尝试使用随机用户 API 来获取一些数据,但看到“获取失败”错误。有人可以为我指出如何解决这个问题的正确方向吗? TIA :)

async function getUsers() {
  let users = await fetch('https://randomuser.me/api/?results=2');
  let data = await users.json();
}

await getUsers();

错误:

GET https://randomuser.me/api/?results=5 net::ERR_FAILED
Uncaught (in promise) TypeError: Failed to fetch

承诺:

Promise {<pending>}__proto__: Promise
[[PromiseState]]: "rejected"
[[PromiseResult]]: TypeError: Failed to fetch

更新:原来我是在一个新的标签页/空白页中测试这个,它没有显示完整的错误: “CORS 策略已阻止从源 'null' 获取 '...' 的访问权限:请求的资源上不存在 'Access-Control-Allow-Origin' 标头。如果不透明的响应满足您的需求,请设置请求模式为 'no-cors' 以获取禁用 CORS 的资源。” 我现在安装了一个 Chrome 扩展来解决这个问题,尽管我确信可能有更好/更永久的方法来解决这个问题,我可能会在改天尝试!

【问题讨论】:

  • getUsers() 是异步的,所以你应该用 await getUsers() 或 getUsers().then( () => ....) 来等待它......不知道这个是问题,但承诺必须解决。
  • 尝试/捕获并打印出错误
  • 我怀疑您的获取或获取 json 的位置出了点问题。我会按照上面的建议做,并将它包装在一个 try catch 中并打印出你的 fetch 的结果。

标签: javascript async-await fetch


【解决方案1】:

你可以使用.then()

function getUsers() {
    fetch("https://randomuser.me/api/?results=2")
      .then((results) => {
        return results.json();
      })
      .then((data) => {
        console.log(data);
        // Access your data here
      });
  }
  
getUsers();

你也可以将它全部封装在一个异步函数中,因为 await 必须在一个异步函数中使用:

(async function () {
  const users = await fetch("https://randomuser.me/api/?results=2")
    .then((response) => response.json())
    .then((data) => {
      return data;
    });

  console.log({ users });
})();

或者使用你原来的语法:

async function getUsers() {
  const users = await fetch("https://randomuser.me/api/?results=2");
  return users.json();
}

getUsers().then((data) => console.log(data));

【讨论】:

  • 不幸的是,这个错误也一样,但谢谢。
  • 您可以访问第二个.then() 中已解决的承诺。在这里,您可以分配您的数据。例如,如果您使用 React,您可以在此时设置您的状态并访问函数外部的数据。
  • 我做了一些修改并添加了更多选项。让我知道这是否有帮助!
【解决方案2】:

你必须等待你的异步函数来解决这样的承诺。

 async function getUsers() {
  let users = await fetch('https://randomuser.me/api/?results=2');
  let data = await users.json();
}

await getUsers();

【讨论】:

  • 谢谢,我试过了,但不幸的是仍然遇到同样的错误。我用更多信息和屏幕截图更新了我的帖子。
猜你喜欢
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多