Javascript 如何在Github上为用户的所有存储库发出一个异步请求

Javascript 如何在Github上为用户的所有存储库发出一个异步请求,javascript,html,github-api,Javascript,Html,Github Api,下面大概就是我需要做的。但这是用Python编写的,我没有掌握一些细节: 这是我目前的代码: function loadRepositories() { let arrOfRepos = [] for (var i = 1, j = 1; j > 0; i++) { var req = new XMLHttpRequest(); // must be synchronous or else, j is assigned below, before the r

下面大概就是我需要做的。但这是用Python编写的,我没有掌握一些细节:

这是我目前的代码:

function loadRepositories() {

  let arrOfRepos = []

  for (var i = 1, j = 1; j > 0; i++) {
    var req = new XMLHttpRequest();

    // must be synchronous or else, j is assigned below, before the response is received from send(). While send() is going on, j is assigned the value of the empy responseText. And the loop doesn't continue.

    req.open('GET', 'https://api.github.com/users/-user-/repos?page=' + i, false)
    req.send()
    arrOfRepos = arrOfRepos.concat(JSON.parse(req.responseText))
    var j = JSON.parse(req.responseText).length
  }
  showRepositories(arrOfRepos)
}
我只想以某种方式向URL发出一个请求。似乎使用分页的唯一方法是多次联系URL,并测试是否应该再打一次电话

我试图在我的
showRepositories()
中测试
req
links
键,但是
这个。links
返回
未定义的


我所拥有的一切都是有效的,但它极其缓慢和丑陋。有没有一种方法可以对API进行一次调用并更快地构建我的单独响应?

一种方法是使用并等待所有承诺得到解决。您必须进行一次初始调用,以获取
链接
标题并检查最后一页是什么。然后进行(第1页的第1页)异步调用(在回调函数中获取响应)

var url=”https://api.github.com/users/google/repos?per_page=100";
风险值回购=[];
函数sendRequest(url,parseLink){
返回新承诺(功能(解决、拒绝){
var xhr=new XMLHttpRequest();
xhr.open(“GET”,url,true);
xhr.send();
xhr.onreadystatechange=函数(){
if(xhr.readyState==4){
如果(xhr.status==200){
var resp=xhr.responseText;
var respJson=JSON.parse(resp);
如果(解析链接){
解析(getLastPage(xhr.getResponseHeader(“链接”)),respJson);
}否则{
解决(respJson);
}
}否则{
拒绝(xhr状态);
}
}
}
});
}
函数getLastPage(链接){
如果(链接){
var linkArr=link.split(',');
对于(变量i=0;i1){
对于(var i=2;i});与您的问题无关,但“必须是同步的”?不,没有理由说“必须是同步的”。如果我将
req.open
保留为false,则会生成一个仅包含前30个repo的数组。是的,因为您需要正确地编写异步代码,而不是使用
for
循环。如果有机会,请阅读以下内容: