【问题标题】:Get variable of nested async function in javascript在javascript中获取嵌套异步函数的变量
【发布时间】:2015-03-13 07:30:43
【问题描述】:

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

所以我有一个 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 函数的异步行为的问题,但我不知道如何更改代码,它将正常工作。

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

【问题讨论】:

  • 没有被注释掉的data变量只是占位符数据吗?
  • callback(false, data); 放在lmsSetting 的回调中
  • @adeneo 将您的评论作为答案(确实如此),以便 OP 可以接受:)
  • 我已经回答了你的问题(已经发布),但只有一个问题:你为什么要设置数据,然后再重新设置它,而不使用它。有什么意义?
  • @SimpleJ 你的意思是函数中的数据(数据,回调)。我想是的,试图省略它,但随后socketio连接崩溃了。我将对其进行编辑,以免混淆

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


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 妈的,就是这样。我已经有过这样的了。它不起作用的原因是 grunt 没有在我的测试机器上运行。感谢一切
  • 我已经尝试过了,但我是新手,无法投票。 :/希望其他人可以投票。也许您可以省略“var data = { ip ...}” - 解决方案的一部分。认为它更令人困惑然后很有帮助,因为无论如何数据都会在 find() 函数中被覆盖......
  • 已修复。哦,我忘记了。但我几乎可以肯定你可以接受答案,那就是checkmark beneath the upvote counter
猜你喜欢
  • 2019-08-21
  • 2014-06-23
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
  • 2021-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多