используйте node-redis с узлом 8 util.promisify

узел-v: 8.1.2

Я использую Redis client node_redis С узлом 8 util.promisify , не blurbird.

обратный вызов redis.get в порядке, но promisify тип получить сообщение об ошибке

TypeError: не удается прочитать свойство "internal_send_command" undefined
в get (D:Githubredis-testnode_modulesredislibcommands - ... js: 62: 24)
при get (внутренний / util.js: 229: 26)
на D:Githubredis-testapp.js: 23: 27
на объектах. (D:Githubredis-testapp.js: 31: 3)
в модуле._compile (module.js: 569: 30)
на объектах.Модуль._выдвижений..js (module.js: 580: 10)
в модуле.загрузочный модуль.js: 503: 32)
на tryModuleLoad (модуль.js: 466: 12)
на работе.Модуль._загрузочный модуль.js: 458: 3)
на работе.Модуль.runMain (модуль.js: 605: 10)

мой тестовый код

const util = require('util');

var redis = require("redis"),
    client = redis.createClient({
        host: "192.168.99.100",
        port: 32768,
    });

let get = util.promisify(client.get);

(async function () {
    client.set(["aaa", JSON.stringify({
        A: 'a',
        B: 'b',
        C: "C"
    })]);

    client.get("aaa", (err, value) => {
        console.log(`use callback: ${value}`);
    });

    try {
        let value = await get("aaa");
        console.log(`use promisify: ${value}`);
    } catch (e) {
        console.log(`promisify error:`);
        console.log(e);
    }

    client.quit();
})()

1 ответов


изменение let get = util.promisify(client.get);

to let get = util.promisify(client.get).bind(client);

решил это за меня:)