在javascript中获取嵌套异步函数的变量
Posted
技术标签:
【中文标题】在javascript中获取嵌套异步函数的变量【英文标题】:Get variable of nested async function in 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连接崩溃了。我将对其进行编辑,以免混淆
【参考方案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。以上是关于在javascript中获取嵌套异步函数的变量的主要内容,如果未能解决你的问题,请参考以下文章
使用jmeter中_javaScript函数和__substring函数嵌套截取字符串变量做传参