请问我可以就节点和redis的控制流问题提出一些建议吗? (又名Python编码器试图适应JavaScript)节点/ redis和回调控制流问题?
我不明白为什么client.smembers
和client.get
(Redis查找)需要回调而不是简单地作为语句 - 它使生活变得非常复杂。
基本上我想查询一个集合,然后当我得到集合的结果时,我需要对每个结果执行get操作。 当我得到所有数据时,我需要将其广播回客户端。
目前我在两个回调中使用一个全局对象,这似乎凌乱。我甚至不确定它是否安全(在启动另一个代码之前代码是否会等待一个client.get
完成)?
当前的代码看起来是这样的:
var all_users = [];
// Get all the users for this page.
client.smembers("page:" + current_page_id, function (err, user_ids) {
// Now get the name of each of those users.
for (var i = 0; i < user_ids.length; i++) {
client.get('user:' + user_ids[i] + ':name', function(err, name) {
var myobj = {};
myobj[user_ids[i]] = name;
all_users.push(myobj);
// Broadcast when we have got to the end of the loop,
// so all users have been added to the list -
// is this the best way? It seems messy.
if (i === (user_ids.length - 1)) {
socket.broadcast('all_users', all_users);
}
});
}
});
但这似乎很凌乱。这是否真的是最好的方法?在致电socket.broadcast
之前,我如何确定所有查询都已执行?
划痕头在此先感谢您的任何建议。
1人[流程](https://github.com/willconant/flow-js) –
共与提问观测同意,我也在为这些概念而苦苦挣扎。 “这就是节点”,似乎有点嚣张,对不起。 –
@SSHTh在Node的网站的[main page](http://nodejs.org/)上正确表示异步I/O。我只能推测出一些原因,这些原因使你选择依赖于你不知道(也不愿意)理解的概念的技术。尝试获得它,如果不是,你会爱上它 - 选择不同的东西。 – elmigranto