我的目标是为列表中的每个对象(每个对象2个)发送多个异步HTTP请求,间隔为125毫秒(无论之前的请求/查询是否完成)。异步请求至关重要,因为这样可以节省大量时间。截至目前,我的代码可以正常工作,但是出现了问题。这些请求似乎重叠在一起,我从另一个请求中获取数据,而不是从应该从中获得响应的确切请求(响应延迟)中获取数据。请注意,query1
不依赖于query2
,但是在完成 query 函数之前,它们都必须同时执行。我的代码如下:
var list = [
object1,
object2,
object3,
...
]
setInterval(function loop()
{
query((list).shift());
return;
}, 125);
function query(currentObj)
{
var query1 = undefined;
var error1 = false;
var query2 = undefined;
var error2 = false;
query1(function(err, data)
{
if(!err)
{
query1 = data;
return;
}
else
{
error1 = true;
return;
}
});
query2(function(err, data)
{
if(!err)
{
query2 = data;
return;
}
else
{
error2 = true;
return;
}
});
function query1(callback)
{
Request("https://something.com/1"+ currentObj, function(error1, response, body) {
if (!error1 && response.statusCode == 200)
{
result = JSON.parse(body);
return callback(null, result);
}
else
{
return callback(error1, null);
}
});
}
function query2(callback)
{
Request("https://something.com/2"+ currentObj, function(error2, response, body) {
if (!(error2) && response.statusCode == 200)
{
result = JSON.parse(body);
return callback(null, result);
}
else
{
return callback(error2, null);
}
});
}
checkQuery1();
function checkQuery1()
{
if(error1 == true){return;}
else if(query1 == undefined) {
setTimeout(checkQuery1, 1);
return;
}
var value1 = query1;
checkQuery2();
function checkQuery2()
{
if(error2 == true){return;}
else if(query2 == undefined) {
setTimeout(checkQuery2, 1);
return;
}
var value2 = query2;
//DO SOME STUFF
return;
}
return;
}
return;
}
我试图在调用下一个查询之前等待每个查询执行,但是这种方法违反了异步请求的目的,尽管它确实可以工作。有什么想法可以使我工作吗?