在javascript中获取嵌套异步函数的变量

时间:2015-01-14 23:28:34

标签: javascript node.js asynchronous mongoose socket.io

我遇到嵌套回调函数的问题,我需要一个变量。

所以我有一个socketio连接,客户端发出'getsettings'来通过回调获取一些数据

客户端:

Socket.emit('getSettings', function (err, res) {
    console.log('Settings retrieved');
    console.log(res);
    $scope.ip = res.ip;
    $scope.port = res.port;
});

nodejs服务器的答案如下所示,注释的代码不会像我希望的那样工作。

的NodeJS服务器:

socket.on('getSettings', function (placeholder, callback) {

    console.log('Settings are broadcasted.');
    // this following "data" variable shall be omitted once the find() problem is solved 
    var data = {
        ip: '192.168.188.32',
        port: '9000'
    };

    // Here I try to get the data from mongodb-database collection "lmssettings"
    // via the mongoose-function find().
    // This won't work because of its async behavior
    //
    // lmsSettings.find({}, function (err, res) {
    //    data = res;
    // });

    callback(false, data); 
});

我是JS的新手并且阅读了很多关于它的内容,以便我知道mongoose的find-function的异步行为存在问题,但我不知道如何更改代码,它是会正常工作。

希望有人对我有所暗示。 Thx提前......

1 个答案:

答案 0 :(得分:0)

异步功能有回调功能,使用res回调中收到的数据(.find)并将其传递给您的callback功能:

socket.on('getSettings', function (data, callback) {

    console.log('Settings are broadcasted.');

    lmsSettings.find({}, function (err, res) {
        callback(false, res); 
    });
});

我认为这应该可以解决您的问题。