【问题标题】:How can I access a callback variable inside of another nested callback function?如何访问另一个嵌套回调函数中的回调变量?
【发布时间】:2013-11-05 17:00:07
【问题描述】:

在下面的代码中,Room.find().exec() 有一个回调函数,它产生变量room。如何在Player.find.exec() 的嵌套回调函数中访问该对象?

 addplayer: function(req, res) {
    Room.find(req.param('roomid')).exec(function(err, room) {
        if (err) {
            console.log(err);
            return res.send(err, 404);
        } else {
            if (req.param('playerid') && req.param('playerid').length > 0) {
                console.log("Room found:", room);
                Player.find(req.param('playerid')).exec(function(err, player) {
                    if (err) {
                        console.log(err);
                        return res.send(err, 404);
                    } else {
                        if (typeof room.players === 'undefined' || !room.players.isArray) room.players = new Array();
                        room.players.push(player);
                        room.save();
                        console.log(player);
                        return res.send(room, 403);
                    }
                });
            } else {
                console.log('No player id.');
                return res.send('No player id.', 404);
            }
        }
    });
  }

这让我更容易看到我在问什么:

【问题讨论】:

  • 应该是可以访问的,试了会怎么样,undefined?
  • 父函数的参数在嵌套函数的范围内。你应该已经可以访问它了。
  • 您拥有的代码已经可以做到这一点。

标签: javascript node.js sails.js


【解决方案1】:

room 应该仍然可以访问,即使在嵌套回调中也是如此。

在函数返回后变量仍然会被定义的原因是因为javascript允许嵌套回调保存对周围变量的引用。

【讨论】:

  • facepalm 你是对的。我越来越不确定,因为我正在使用的函数正在返回一个数组。 room.save() 不起作用,但 room[0].save() 起作用。
猜你喜欢
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-24
  • 1970-01-01
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多