2014-11-20 2 views
-2
users = []; 
    .on('result', function(user) { 
      async.waterfall([ 
       function(cb) { 
        get_comm(user.post_id, function(comms) { 

         user.comm = comms; 
         users.push(user); 
         cb(users); 
        }) 
       }, 
      ], function(users, cb) { 

       console.log(users); // it prints out 
      }); 

     }) 
     .on('end', function() { 
      if (connectionsArray.length) { 
       pollingTimer = setTimeout(pollingLoop, POLLING_INTERVAL); 
       updateSockets({ 
        users: users // empty []; !! 

       }); 

      } 
     }); 

Таким образом, я хочу, чтобы после завершения цикла результата распечатать все данные, но массив заполнен в цикле результатов и пустым из него.Nodejs Callback async

+0

var get_comm = function (post_id, cb) {varcomments = connection.query (..); comments.on ('end', function() { cb (comms);})} users = []; var query = connection.query (...); .on 'результат' (функция (пользователь) { async.waterfall ([ функция (CB) {get_comm (user.post_id, функции (порта связи) { user.comm = порта связи; users.push (пользователь); Cb (пользователей); })} , ], функция (пользователи, Cb) { console.log (пользователи); // он печатает });} ) .На ('end', function() { if (connectionsArray.length) { pollingTimer = setTimeout (pollingLoop, POLLING_INTERVAL); updateSockets ({ use rs: users // empty []; !! }); } }); –

+0

вот полный код проверить @ jfriend00 –

ответ

0

Я принимаю метод on из экземпляра EventEmitter. Если это так, то обратные вызовы, переданные в on, не поддерживают асинхронный режим.

Вы код, который делает асинхронный внутри них.