【问题标题】:Node.js redis promisify with .multi or .batchNode.js redis 使用 .multi 或 .batch 承诺
【发布时间】:2020-10-15 03:11:35
【问题描述】:

使用 npm 模块“redis”,我对单个命令使用 utils promisify 没有问题。

const { promisify } = require("util");
const redis = require("redis");
const client = redis.createClient();

const hmgetAsync = promisify(client.hmget).bind(client),

现在我希望能够使用 .multi 和 .batch 方法。

这是我的一个辅助函数的示例,它使用 .batch 而不使用 promisify 和非 promisify 版本的命令。

const getData = async (ids) => {
    const batch = client.batch();

    ids.forEach(id => {
        batch.hgetall(id)
    });

    return new Promise((resolve, reject) => {
        batch.exec((err, replies) => {
            if (err) {
                reject(err);
            }

            const data = replies
                // missing keys require filtering
                .filter(it => !!it)
                .map(dataPoint => _toDataPoint(dataPoint));

            resolve(data);
        })
    })
};

工作没问题,但我很好奇是否可以将 promisify 与 .multi 或 .batch 一起使用

非常感谢,

【问题讨论】:

    标签: node.js redis node-redis node-promisify


    【解决方案1】:

    下面是multi 的承诺版本示例,其中包含一组命令作为参数:

    const { promisify } = require("util");
    const redis = require("redis");
    const client = redis.createClient();
    
    const multiPromisified = commands => {
            const multi = client.multi(commands);
            return promisify(multi.exec).call(multi);
    }
    
    multiPromisified([['get', 'key1'], ['get', 'key2']]);
    

    【讨论】:

      猜你喜欢
      • 2014-12-07
      • 2015-04-08
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 2017-03-07
      • 2018-04-05
      • 2017-05-17
      相关资源
      最近更新 更多