NodeJS异步模块+ redis

时间:2014-11-27 09:20:24

标签: node.js

我在节点中使用async模型以及redis。

我的代码:

async.each(data, function(n, done) {
        redisClient.LLEN("user:" + n + ":active", function(err, numbActive) {
            if(!err) {
                console.log("[CHECKING].... " + n + " NUMB::::: " + numbActive);
                globalNumbActive += numbActive;
                done(globalNumbActive);
            } else {
                done(err, 0);
            }
        });             
}, function(err, globalNumbActive) {
    console.log("GLOBALS --> " + globalNumbActive);
    return callback(globalNumbActive);
}); 

以上数据包含:

['231', '323', '323']

我想检查user:user_id:active列表中的每个用户ID,然后对它们求和并返回。

现在,上面只抓住第一个,然后返回。

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:0)

如果删除主回调的第二个参数怎么办?以下代码段对我有用。

// Assume the two lists have been created in the way below.
// redisClient.lpush('user:231:active', 'John', 'Adam');
// redisClient.lpush('user:323:active', 'Sam');

var data = ['231', '323', '323'];
var globalNumActive = 0;
async.each(data, function(n, callback) {
    redisClient.llen('user:' + n + ':active', function(err, numActive) {
        if (!err) {
            globalNumActive += numActive;
            console.log('user id: ' + n + '\tactive #: ' + numActive + '\ttotal active #: ' + globalNumActive);
            callback(null);
        } else {
            callback(err);
        }
    });
}, function(err) {
    console.log('total active #: ' + globalNumActive);
});

输出

user id: 231    active #: 2    total active #: 2
user id: 323    active #: 1    total active #: 3
user id: 323    active #: 1    total active #: 4
total active #: 4