node.js - 在 nodejs 上循环 redis 返回的 promise

标签 node.js loops redis promise sortedset

我正在尝试在 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);
                })
        }
    })

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

目前,我只是想遍历所有“结果”并计数。

谁能帮帮我?

编辑:

我从 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
    });

关于node.js - 在 nodejs 上循环 redis 返回的 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36327754/

相关文章:

node.js - 如何在Microsoft Bot Framework的node.js版本中获取 'exit'?

javascript - node.js:将异步函数列表应用于列表列表中的每个项目

php - 从数组中的特定行获取数据

c++ - 如何在 Linux 和 C++ 上迭代 com 端口并打印到控制台?

caching - redis在django-rest-framework中的get方法

docker - Redis 服务器在使用 docker 镜像时拒绝连接

redis - 在哈希键中存储数组值会引发错误

javascript - 替代 grunt-contrib-less?

javascript - 如何使用 ES6 Symbol 处理 node.js 中的 new Error() ?

java - 特殊套管最后一个元素的最佳循环成语