簡體   English   中英

Node.js異步循環功能

[英]Node.js async looping function

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

我正在使用狼瘡處理for循環,並且正在查詢twitter API,然后嘗試在返回的json中獲取最大的id,為此我正在使用lodash 獲得此值后,我想再次運行循環,但這一次將值傳遞給函數。 我使用async.js遍歷返回的JSON

lupus(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的值。

問題是您正在進行兩個異步操作(狼瘡“循環”和T.get調用),並且它們之間基本上沒有協調。

因為T.get將是異步的,所以我根本不會在這里使用狼瘡(ugh!):

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

代碼中有一些無關的東西看起來不正確:

  1. 在第一次給T.get調用時,從未使用過maxId情況下就在使用它。 好像您要在那里有某種初始值。

  2. 您在T.get回調中拋出了錯誤。 T.get的文檔是否告訴您它將為該錯誤做些有用的事情? 如果沒有,您可能想要做其他事情。 投擲不會有,例如,停止循環在你的原代碼( 它將與上面的代碼)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM