使用Fetch获取GitHub用户数据

3

抱歉,我对JavaScript不是很熟悉。我正在尝试从GitHub获取公共用户数据并在我的个人作品集上显示它。目前我有以下代码:

 getData(url) {
  return fetch(url);
}
const userData = getData("https://api.github.com/users/userName");

userData
  .then((response) => response.json())
  .then((response) => console.log(response))
  .catch((error) =>
    console.log("There was an error fetching the data: " + error)
  );

  console.log(userData)

我收到的响应是包含用户数据的JSON,但当我使用console.log(userData)时,响应为Promise { <state>: "pending" }
此外,我可以看到初始响应中有一个id,但是当我使用console.log(userData.id)时,响应为undefined
我已经阅读了GitHub API文档并观看了一些关于Promises的视频,但似乎无法正确地使代码工作。
感谢您抽出时间查看此问题,并感谢任何对此的帮助!

1
userData is a promise. your data should be response - Daniel A. White
这个很顺利!非常感谢...最后一个问题 - 我该如何将响应中的信息设置为变量,以便我可以在响应代码之外使用? - Jonathan Sexton
1个回答

4

这是因为userData是一个promise。如果您尝试使用async/await(文档在此处可用),您将能够同步获取数据。

 const getData = async (url) => {
   try {
     const data = await fetch("https://api.github.com/users/:user_name");
     console.log(data.json());
     return data;
   } catch (e) {
     console.log("There was an error fetching the data: " + error)
   }
 }

谢谢您的回复!返回:响应bodyUsed:false头:Headers {}ok:true重定向:false状态:200状态文本:“OK”类型:“cors”网址:“https://api.github.com/users/js-goose”原型:ResponsePrototype {clone: clone(),arrayBuffer:arrayBuffer(),blob:blob(),...}但我没有得到任何用户数据......我有什么遗漏吗? - Jonathan Sexton
1
@JonathanSexton 上述代码记录了一个 Response。用户数据通过 resp.json() 获取,它将 Response 的主体解析为一种更友好的普通 JS 对象。 - Nino Filiu
1
@NinoFiliu 非常感谢您的解释 - 经过一些重构,我最终让代码正常工作了。再次感谢您! - Jonathan Sexton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接