noeud -v: 8.1.2
J'utilise le client redis node_redis avec le nœud 8 util.promisify, pas de blurbird.
le rappel redis.get est ok, mais promisify type get message d'erreur
TypeError: impossible de lire la propriété 'internal_send_command' de undefined
à get (D:\Github\redis-test\node_modules\redis\lib\commands.js: 62: 24)
à get (internal/util.js: 229: 26)
sur D:\Github\redis-test\app.js: 23: 27
dans Object. (D:\Github\redis-test\app.js: 31: 3)
sur Module._compile (module.js: 569: 30)
sur Object.Module._extensions..js (module.js: 580: 10)
sur Module.load (module.js: 503: 32)
sur tryModuleLoad (module.js: 466: 12)
sur Function.Module._load (module.js: 458: 3)
sur Function.Module.runMain (module.js: 605: 10)
mon code de test
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();
})()
modification de let get = util.promisify(client.get);
à let get = util.promisify(client.get).bind(client);
résolu pour moi :)
Si vous utilisez node v8 ou supérieur, vous pouvez promettre node_redis avec util.promisify comme dans:
const {promisify} = require('util'); const getAsync = promisify(client.get).bind(client); // now getAsync is a promisified version of client.get: // We expect a value 'foo': 'bar' to be present // So instead of writing client.get('foo', cb); you have to write: return getAsync('foo').then(function(res) { console.log(res); // => 'bar' });
ou en utilisant async attendre:
async myFunc() { const res = await getAsync('foo'); console.log(res); }
abattu sans vergogne de redis repo officiel