假设我的服务器正准备发送一个新对象以响应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);
});
}
但是我需要做两个INCR回调怎么办?我不认为这是对的,因为一切都是异步的,我不能保证我的回答会被正确设置......
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程序员......
答案 0 :(得分:1)
您可以通过transaction或lua script在一次通话中执行多个redis命令。这样你就不必处理每个命令的一个回调,而是执行多个命令并只处理一个回调。例如,尝试在redis客户端中查看multi方法/命令。