0
说我的服务器正在准备一个新的对象响应发送到POST请求的处理:异步node_redis功能,尴尬的两个键使用INCR一次
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...
}
我觉得我失去了一些东西很明显,作为一个新手节点.js和redis编程器...
啊,是的,我并不理解multi/exec模式是如何工作的......我假定exec()被调用的“结果”参数就像调用incr()的返回值一样,单独(即成功或失败为真/假)。谢谢。 – strugglingcomic