假设我的服务器正在准备一个新对象,以响应POST请求:
var responseObj = {
UserID : "0", // default value
ItemID : "0", // default value
SomeData : foo
}现在,当我创建这个新对象时,我想增加我在redis中用来跟踪这两个项的UserId和ItemID计数器。但这似乎需要两个独立的异步回调,这对我来说似乎是一个问题,因为我不能只是将其余的响应-编写代码放在其中一个回调中。
我的意思是,如果我只有一个键和一个回调需要担心,我会写下这样的代码:
app.post('/', function(req, res, next) {
// do some pre-processing
var responseObj = {};
redis.incr('UserID', function(err, id) {
responseObj.UserID = id;
// do more work, write some response headers, etc.
res.send(responseObj);
});
}但是我该如何处理两个增量回调呢?我不认为这是正确的,因为一切都是异步的,我不能保证我的响应将被正确设置……
app.post('/', function(req, res, next) {
// do some pre-processing
var responseObj = {};
redis.incr('UserID', function(err, id) {
responseObj.UserID = id;
// do some work
});
redis.incr('ItemID', function(err, id) {
responseObj.ItemID = id;
// do some work
});
res.send(responseObj); // This can't be right...
}作为一名新手node.js和redis程序员,我觉得我遗漏了一些明显的东西。
发布于 2013-06-04 15:00:51
您可以通过transaction或lua script在一次调用中执行多个redis命令。这样,您就不必为每个命令处理一个回调,而是执行多个命令,只需处理一个回调。例如,尝试查看redis客户端中的multi方法/命令。
https://stackoverflow.com/questions/16911252
复制相似问题