我是Node.js的新手,我很难知道这是否是正确的方法:
我使用lupus来处理for循环,我正在查询twitter API,然后我尝试在返回的json中获取最大的id,因为我正在使用lodash。一旦我有了这个值,我想再次运行循环,但这次将值传递给函数。我使用async.js
循环返回JSONlupus(0, loopLength, function(n) {
var maxId;
T.get('favorites/list', {count: 200, max_id: maxId}, function(err, data, response) {
if (err) {
throw (err);
}
maxId = _.max(_.pluck(data, "id"));
async.each(data, function(file, callback) {
console.log(file)
}, function(err){
if( err ) {
console.log('A file failed to process: '+ err);
});
})
}, function() {
console.log('All done!');
});
})
似乎maxId
永远不会被设置,因此.each
循环永远不会获得下一组JSON。我的问题是我是否正确执行此操作,如何从.each
函数中获取maxId的值。
答案 0 :(得分:1)
问题在于你有两个异步事件(狼疮“循环”和T.get
调用)并且它们之间基本上没有协调。
因为T.get
将是异步的,所以我不会在这里使用lupus(呃!):
var index = 0;
var maxId;
next();
function next() {
T.get('favorites/list', {count: 200, max_id: maxId}, function(err, data, response) {
if (err) {
throw (err);
}
maxId = _.max(_.pluck(data, "id"));
async.each(data, function(file, callback) {
console.log(file)
}, function(err){
if( err ) {
console.log('A file failed to process: '+ err);
});
if (++index < loopLength) {
next();
} else {
console.log('All done!');
}
});
}
代码中有一些不相关的东西看起来不正确:
在第一次调用maxId
时,如果您从未为其分配过值,则表示您正在使用T.get
。好像你想要某种初始价值。
您在T.get
回调中抛出错误。 T.get
的文档是否告诉您它会对该错误做一些有用的事情?如果没有,您可能想要做其他事情。例如,扔在那里就不会停止原始代码中的循环(将使用上面的代码)。