在 nodejs 上循环 redis 返回的承诺

Loop a promise returned by redis on nodejs

我正在尝试在 for 循环中使用 promise。 我觉得是时候让我第一次使用 Promise.all 但我似乎无法让它工作。

这是我目前的情况:

redis.keys('en:230:*')
    .then(function(result) {
        // result = ['en:230.1', 'en:230.2', 'en:230.5', 'en:230.10', 'en:230.3', 'en:230.75']
        for (var k = 0; k < result.length; ++k) {
            redis.zcount(result[k])
                .then(function(r) {
                    console.log(r);
                })
        }
    })

我的目标是计算所有 "result" 个排序集并将每个结果放入另一个名为 en:230:top 的排序集 这将包含分数的计数结果和值的 1,2,5,10,3,75。

目前,我只是想遍历所有 "result" 并计数。

谁能帮帮我?

编辑:

我从Promise.all中了解到的内容如下。 这样的事情应该有效吗?

var array = [];
redis.keys('en:230:*')
    .then(function(result) {
        // result = ['en:230.1', 'en:230.2', 'en:230.5', 'en:230.10', 'en:230.3', 'en:230.75']
        for (var k = 0; k < result.length; ++k) {
            array.push(redis.zcount(result[k]));
        }
        return Promise.all(array);
    })
    .then(function(r) {
        console.log(r);
    })

您可以使用 Promise.all:

redis.keys('en:230:*')
    .then(function (results) {

        // collect individual promises in an array
        var queries = results.map(function (r) {
            return redis.zcount(r);
        });

        // return a promise that resolves when all of query promises resolve
        return Promise.all(queries);
    })
    .then(function (counts) {
        // do something with counts
    })
    .catch(function(err){
        // oops
    });