Node.js 由于异步请求节点,回调返回null
由于异步请求,“选项卡”为空 我试图找到一种方法返回一个标签不为空的回调(标签)Node.js 由于异步请求节点,回调返回null,node.js,asynchronous,callback,request,Node.js,Asynchronous,Callback,Request,由于异步请求,“选项卡”为空 我试图找到一种方法返回一个标签不为空的回调(标签) 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)
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);
}
函数getUserEvents(回调){
var选项卡=[];
对于(var i=0;i来说,这是一个相当棘手的问题:你需要跟踪你得到了多少响应,只有当你得到所有响应时才调用callback(tab)。这是实际的簿记工作
像async这样的库有用于此的函数——例如,一个异步循环。您可以手动完成,但它们的方式已经过测试。常规for循环不适用于这样的异步调用。您需要使用一些东西,例如async.while(),来控制async request()调用的流程。下面是修订后的代码(不要忘记安装异步模块):
var async=require('async');
函数getUserEvents(回调){
var选项卡=[];
var i=0;
异步的(
函数(){return i<100;},
功能(cb){
请求(“mysite/list”页=“+i,函数(err,res,body){
如果(!err&&res.statusCode==200){
tab.push(JSON.parse(body));
}
i++;
cb();
});
},
功能(err){
//完成处理第0-99页
回调(选项卡)
}
);
}
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)
}
);
}