首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理异步node_redis函数,笨拙地一次在两个键上使用INCR

处理异步node_redis函数,笨拙地一次在两个键上使用INCR
EN

Stack Overflow用户
提问于 2013-06-04 14:35:44
回答 1查看 439关注 0票数 0

假设我的服务器正在准备一个新对象,以响应POST请求:

代码语言:javascript
复制
var responseObj = {
    UserID : "0", // default value
    ItemID : "0", // default value
    SomeData : foo
}

现在,当我创建这个新对象时,我想增加我在redis中用来跟踪这两个项的UserIdItemID计数器。但这似乎需要两个独立的异步回调,这对我来说似乎是一个问题,因为我不能只是将其余的响应-编写代码放在其中一个回调中。

我的意思是,如果我只有一个键和一个回调需要担心,我会写下这样的代码:

代码语言:javascript
复制
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);
    });
}

但是我该如何处理两个增量回调呢?我不认为这是正确的,因为一切都是异步的,我不能保证我的响应将被正确设置……

代码语言:javascript
复制
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程序员,我觉得我遗漏了一些明显的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-04 15:00:51

您可以通过transactionlua script在一次调用中执行多个redis命令。这样,您就不必为每个命令处理一个回调,而是执行多个命令,只需处理一个回调。例如,尝试查看redis客户端中的multi方法/命令。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16911252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档