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

Get variable of nested async function in javascript

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

所以我有一个 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 的新手并且阅读了很多关于它的内容所以我知道这是猫鼬的查找函数的异步行为的问题,但我不知道如何更改代码,它会正常工作。

希望有人能给我提示。提前致谢...

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

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

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

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

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