0

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

var responseObj = {
    UserID : "0", // default value
    ItemID : "0", // default value
    SomeData : foo
}

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

我的意思是,如果我只需要担心一个键和一个回调,我会写如下内容:

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 程序员,我觉得我错过了一些明显的东西......

4

1 回答 1

1

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

于 2013-06-04T07:00:50.887 回答