如何在另一个嵌套回调函数中访问回调变量?

时间:2013-11-05 17:00:07

标签: javascript node.js sails.js

在下面的代码中,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);
            }
        }
    });
  }

这样可以让您更轻松地查看我的问题:

enter image description here

1 个答案:

答案 0 :(得分:3)

即使在嵌套回调中,

room仍然可以访问。

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