【发布时间】:2011-12-19 19:02:07
【问题描述】:
请问我可以就 node 和 redis 的控制流问题寻求一些建议吗? (也就是试图习惯 JavaScript 的 Python 编码器)
我不明白为什么 client.smembers 和 client.get(Redis 查找)需要回调而不是简单的语句 - 这让生活变得非常复杂。
基本上我想查询一个集合,然后当我有集合的结果时,我需要对每个结果执行一次获取。 获得所有数据后,我需要将其广播回客户端。
目前我在两个回调中执行此操作,使用一个全局对象,这看起来很乱。我什至不确定它是否安全(代码会等待一个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 之前,我如何确定所有查找都已执行?
挠头提前感谢您的任何建议。
【问题讨论】:
标签: javascript node.js redis