Nodejs Mysql回调地狱

时间:2014-11-19 21:11:08

标签: mysql node.js asynchronous callback

我在nodejs中使用了异步,使用mysql从数据库中注入数据。

所以我无法将数据从mysql结果传递到mysql结束以将其打印出来

看到它探索的这段代码

    var users = [] ;

      .on('result', function(user,callback) {
    async.waterfall([
    function(cb){
        get_comm(user.post_id ,function(moredata){

            user.moredata = moredata;
            users.push(user);
            cb(users);

        })
    },

    ],function(users , cb){

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


})
.on('end', function() {
  if (connectionsArray.length) {
    pollingTimer = setTimeout(pollingLoop, POLLING_INTERVAL);
                console.log(users); // it prints out empty array [] !!

 updateSockets({
      users: users // empty array [] !!
    });


  }
});

2 个答案:

答案 0 :(得分:0)

我不确定瀑布是否是最适合您的功能,如果您有一堆用户ID,也可以使用每个或每个系列https://github.com/caolan/async

示例:

userIDs = [1,3,42,23];
users = [];
async.each(users, function( user, callback) {
    get_comm(user,function(moredata){
      user.moredata = moredata;
      users.push(user);
      callback(users);
    })
  }
  }, function(err){
  if( err ) {
    console.log(err);
  } else {
    console.log(users);
  }
});

尝试一下,我不确定这是你想要的,你的问题很难理解。

答案 1 :(得分:0)

 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 []; !!

  });

  }
});

所以我希望在完成结果循环后打印出所有数据但是数组在结果循环中已满并且空出来!!