javascript - 如何从带有回调参数的循环发送多个 GET 请求?
问题描述
我需要在一个循环中发送多个 get 请求,处理响应的回调需要循环的索引,以便将响应数据与我已经拥有的关于每个对象的数据结合起来。
由此,我知道如何创建单个请求并使用回调传递额外的参数。我还能够发送多个请求并使用 XMLHttpRequest.onreadystatechange 为结果设置函数。
我尝试将这两种解决方案结合起来,但是因为它是一个循环,所以每次迭代后变量都会发生变化,并且所有响应最终都会被循环最后一次迭代的参数调用。我认为var indexOfProject = i;
在循环内使用可以解决问题,但事实并非如此。这是我的代码:
var count = 0;
var queryProjects = 2;
var totalNeeded = queryProjects;
var apicallback = function(project, index) {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
console.log("processing response, index, project : " + index);
console.log(project);
var objResponse = JSON.parse(xmlHttp.responseText);
_projectsData.projects[index]['lastUpdateTime'] = objResponse['updated_at'];
count++;
if (count==totalNeeded){
console.log("got all responses!");
//TODO:
}
}
};
for (var i = 0; i < queryProjects; i++) {
var indexOfProject = i;
if (repos[i] != null) {
var theUrl = "https://api.github.com/repos/" + repos[i][0];
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
apicallback(_projectsData.projects[indexOfProject], indexOfProject);
}
console.log("sent request!");
xmlHttp.open("GET", theUrl, true); // true for asynchronous
xmlHttp.send(null);
}
else {
totalNeeded--;
}
}
这个我也试过
xmlHttp.onreadystatechange = apicallback(_projectsData.projects[indexOfProject], indexOfProject);
但更糟糕的是,回调只被调用一次,when readystate==1
。
解决方案
推荐阅读
- r - 因子查找中 NA 的意外回报
- javascript - /v2/search/SARS_CoV_2/GID1716 处的 NoReverseMatch
- python-3.x - Python - 带参数的 pypsexec 命令
- java - mediaRecorder.prepare(); 尝试创建文件时出现错误Getting file not found异常
- api - 我的 api 项目没有达到我的断点
- javascript - 自动显示隐藏 DIV Javascript 语法
- asp.net - Body 如何应用于 HTTP 请求?
- python - 在某个类别中创建频道
- python - 如何使用 python 从给定文本生成问题 True/False?
- nginx - PHP7 安装:libcurl3 和 libwebp5 依赖,但不可安装