由于异步请求" tab"是空的
我试图找到一种方法来返回一个非空的标签
的回调(标签)function getUserEvents(callback){
var tab = [];
for(var i=0; i<100 ;i++){ //page system
request("mysite/list?page="+i, function (err, res, body) {
if (!err && res.statusCode == 200) {
tab.push(JSON.parse(body));
}
});
}
callback(tab);
}
答案 0 :(得分:0)
这是非常棘手的:你需要跟踪你已经获得了多少响应,并且只有在你拥有它们时才调用回调(tab)。这是实际的簿记工作。
像async这样的库具有此功能 - 例如异步循环。你可以手工完成它,但是它们的方式已经过测试。
答案 1 :(得分:0)
Regular for循环对于那样的异步调用不起作用。您需要使用诸如async.whilst()之类的东西来控制异步request()调用的流程。这是修改后的代码(不要忘记安装异步模块):
var async = require('async');
function getUserEvents(callback){
var tab = [];
var i = 0;
async.whilst(
function() { return i < 100; },
function(cb) {
request("mysite/list?page="+i, function (err, res, body) {
if (!err && res.statusCode == 200) {
tab.push(JSON.parse(body));
}
i++;
cb();
});
},
function (err) {
// finish processing pages 0-99
callback(tab)
}
);
}