回调返回NULL的NodeJS
问题描述:
因为异步请求“标签”是空的回调返回NULL的NodeJS
我试图找到一种方法来与不空
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);
}
答
这一个标签返回的回调(片)是合法的棘手:你需要跟踪你有多少响应,并且只有在你拥有全部响应时才调用回调(tab)。这是真正的簿记工作。
像async这样的库有这个功能 - 例如异步循环。你可以手工做,但他们的方式是测试。
答
Regular for 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)
}
);
}
谢谢它的工作原理 – Rayan