【发布时间】: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