Javascript Node.js异步循环函数
我是Node.js的新手,正在努力了解这是否是执行以下操作的正确方法: 我正在使用来处理for循环,我正在查询twitterapi,然后我正在尝试获取返回的json中最大的id,为此我正在使用。一旦我有了这个值,我想再次运行循环,但这次是将值传递到函数中。我循环使用返回的JSONJavascript Node.js异步循环函数,javascript,node.js,Javascript,Node.js,我是Node.js的新手,正在努力了解这是否是执行以下操作的正确方法: 我正在使用来处理for循环,我正在查询twitterapi,然后我正在尝试获取返回的json中最大的id,为此我正在使用。一旦我有了这个值,我想再次运行循环,但这次是将值传递到函数中。我循环使用返回的JSON 似乎maxId从未设置过,因此循环中的每个循环都从未获得下一组JSON。我的问题是我这样做是否正确,以及如何从。每个函数中获取maxId的值。问题是,您有两个异步操作(luse“loop”和T.get调用),它们之间基
似乎
maxId
从未设置过,因此循环中的每个循环都从未获得下一组JSON。我的问题是我这样做是否正确,以及如何从。每个函数中获取maxId的值。问题是,您有两个异步操作(luse“loop”和T.get
调用),它们之间基本上没有协调
因为T.get
将是异步的,所以我根本不会在这里使用lube(啊!):
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!');
}
});
}
var指数=0;
var-maxId;
next();
函数next(){
get('favorites/list',{count:200,max_id:maxId},函数(err,data,response){
如果(错误){
抛出(错误);
}
maxId=u0.max(0.pull(数据,“id”));
每个(数据、函数(文件、回调){
console.log(文件)
},函数(err){
如果(错误){
console.log('处理文件失败:'+err);
});
如果(++索引<循环长度){
next();
}否则{
console.log('All done!');
}
});
}
代码中有几个不相关的东西看起来不正确:
在第一次调用T.get
时,您使用的是maxId
,但您从未为其赋值。似乎您需要某种初始值
您正在从T.get
回调抛出一个错误。T.get
的文档是否告诉您它将对该错误做一些有用的处理?如果不是,您可能想做其他事情。例如,抛出该错误不会停止原始代码中的循环(它将使用上述代码)
您的代码将无法按原样成功解析。@第四,我在复制和粘贴时遗漏了一些括号,现在已更新。您不需要使用异步。每个同步循环数据
?事实上,它甚至不起作用,因为您从未调用“下一步”什么是looplength
?@Bergi只是为循环长度设置的一个变量
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!');
}
});
}