You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用GitHub组织仓库API时,fetch的response.json()返回空对象及Pending Promise问题

解决GitHub API fetch调用后response.json()显示pending Promise的问题

嘿,我帮你捋捋这个问题!你现在看到的Promise { <state>: "pending" }其实不是返回了空对象,而是因为你没正确处理response.json()返回的Promise——它本身是一个异步操作,不会直接给出解析好的数据。

问题根源

response.json()方法返回的是一个Promise,它需要时间去把响应体解析成JSON。你直接console.log它,只会打印出这个处于pending状态的Promise对象,而不是最终的仓库数据。

修复方案1:链式调用.then()

你需要在response.json()后面再加一个.then()来接收解析后的JSON数据,同时别忘了检查请求是否成功:

const url = "https://api.github.com/orgs/octokit/repos";
fetch(url, { method: 'GET' })
  .then((response) => {
    // 先确认请求成功(HTTP状态码200-299)
    if (!response.ok) {
      throw new Error(`请求失败:状态码 ${response.status}`);
    }
    return response.json(); // 将Promise传递给下一个then
  })
  .then((repoList) => {
    console.log(repoList); // 这里就是你要的仓库列表啦!
  })
  .catch((err) => {
    console.log('出错了:', err);
  });

修复方案2:用async/await语法(更直观)

如果你觉得链式then有点绕,async/await写法会更清晰:

async function fetchOrgRepos() {
  const url = "https://api.github.com/orgs/octokit/repos";
  try {
    const response = await fetch(url, { method: 'GET' });
    if (!response.ok) {
      throw new Error(`请求失败:状态码 ${response.status}`);
    }
    const repoList = await response.json(); // 等待Promise解析完成
    console.log(repoList);
  } catch (err) {
    console.log('出错了:', err);
  }
}

// 调用函数
fetchOrgRepos();

额外注意事项

  • 一定要检查response.ok:如果请求返回404(组织不存在)或者403(API限流),不检查的话后续解析可能会报错,或者得到不符合预期的数据。
  • GitHub API有请求频率限制:如果频繁调用可能会触发限流,这时候响应状态码会是403,记得在catch里处理这种情况。

内容的提问来源于stack exchange,提问作者sarah keserwany

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:53:13