Javascript Node.js异步循环函数

Javascript Node.js异步循环函数,javascript,node.js,Javascript,Node.js,我是Node.js的新手,正在努力了解这是否是执行以下操作的正确方法: 我正在使用来处理for循环,我正在查询twitterapi,然后我正在尝试获取返回的json中最大的id,为此我正在使用。一旦我有了这个值,我想再次运行循环,但这次是将值传递到函数中。我循环使用返回的JSON 似乎maxId从未设置过,因此循环中的每个循环都从未获得下一组JSON。我的问题是我这样做是否正确,以及如何从。每个函数中获取maxId的值。问题是,您有两个异步操作(luse“loop”和T.get调用),它们之间基

我是Node.js的新手,正在努力了解这是否是执行以下操作的正确方法:

我正在使用来处理for循环,我正在查询twitterapi,然后我正在尝试获取返回的json中最大的id,为此我正在使用。一旦我有了这个值,我想再次运行循环,但这次是将值传递到函数中。我循环使用返回的JSON


似乎
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!');
        }
      });
    }