Javascript回调返回值

时间:2013-08-25 20:54:10

标签: javascript node.js callback

使用node.js,我连接到我的redis数据库并将值返回到数组中。但是,为了返回值,我必须使用回调函数将它们移出范围。我已经看到很多关于操作中回调函数的例子,而且我的工作就像我见过的所有其他函数一样,但是,当我在res.render中将函数作为一个选项调用时,它会尝试返回父函数而不是比回调。如何将回调函数的值返回到players:选项?

家长功能

function openPlayers(callback) {
  var players = [];
  db.hgetall("players", function(err, objs) {
    // Objects of Response
    for (var k in objs) {
      // Items are the individual key-value object
      var newPlayer = {};
      var items = JSON.parse(objs[k]);
      for (var x in items) {
        // x is the key for each object
        newPlayer[x] = items[x];
      }
      players.push(newPlayer);
    }
    callback(players);
  });
}

回调功能的位置

exports.newPlayer = function(req, res) {
  res.render('newPlayer', {
    title: 'New Player',
    players: (openPlayers(function(ps) { //callback function
              return(ps);
            }))
  });
};

1 个答案:

答案 0 :(得分:4)

好吧,你不能因为openPlayers是异步并且不返回任何值,这就是它需要回调的原因。你能做的就是这样:

exports.newPlayer = function(req, res) {

    openPlayers(function (ps) {
        res.render('newPlayer', {
            title: 'New Player',
            players: ps
        });
    });
};