【发布时间】:2011-11-24 17:05:46
【问题描述】:
我最近一直在更深入地探索javascript,玩弄node、redis、socket.io、express simple webapp。
我想我遇到了一个问题,它是 JS 和 PHP 之间根本区别的一个例子,这是我过去几年一直在使用的。
这个回调我写好了,需要从redis返回一堆数据
app.get('/deck', function(request, response) {
dealer.sort('cards', 'BY', 'deal:*->timestamp', 'GET', 'card:*->card_key',
function(err, card_keys) {
var deck = [];
for (k in card_keys) {
dealer.hget(card_keys[k], 'data', function(err, card_data) {
var deal = eval('(' + card_data +')');
deals.push(cards);
});
}
response.json(deals);
}
);
});
现在首先我认为这是一个变量范围问题,所以我重写了一个闭包(我是否正确使用了这个术语?)这不起作用,因为我是在同步思维模式下编写的。 我意识到这本质上是同步的,并在收集数据之前将其发送出去。设计错了。
我可以重写函数以使用 socket.io 的 emit 函数在收集数据时发送数据。
但是有处理同步数据的设计模式吗?如果我想按顺序显示最后 10 张卡片怎么办?我是否无论如何都发送数据并让客户端代码排队 10,并触发排序然后控制显示的事件?
编辑:我发现 this question 基本上是我的,除了我想弄清楚如何在不依赖同步库的情况下设计它。
【问题讨论】:
-
你不能在你的 for 循环中使用异步函数。您应该使用 async 或 streamlinejs 之类的东西。
-
谢谢,但为了我自己的利益,我想了解如何在不依赖这些库的情况下以回调方式构造它。
-
检查我发布的两个链接,它应该回答你的问题。
标签: design-patterns node.js socket.io