Redis 节点 - 从哈希中获取 - 不插入数组
Redis Node - Get from hash - Not inserting into array
我的目标是插入从 Redis 哈希中获取的值。我正在为节点 js 使用 redis 包。
我的代码如下:
getFromHash(ids) {
const resultArray = [];
ids.forEach((id) => {
common.redisMaster.hget('mykey', id, (err, res) => {
resultArray.push(res);
});
});
console.log(resultArray);
},
函数末尾记录的数组为空,res不为空。请问我能做些什么来填充这个数组?
您需要使用一些控制流程,async library or Promises (as described in reds docs)
当 redis 调用的结果 return 时,将您的 console.log
放入回调中。然后你会看到更多的打印出来。也为您的 .forEach
使用一种控制流模式,因为它当前是同步的。
如果您将代码修改成这样,它会很好地工作:
var getFromHash = function getFromHash(ids) {
const resultArray = [];
ids.forEach((id) => {
common.redisMaster.hget('mykey', id, (err, res) => {
resultArray.push(res);
if (resultArray.length === ids.length) {
// All done.
console.log('getFromHash complete: ', resultArray);
}
});
});
};
在您的原始代码中,您在任何 hget 调用返回之前打印结果数组。
另一种方法是创建一个承诺数组,然后对其执行 Promise.all。
您会在 Node 中经常看到这种行为,请记住它对几乎所有 i/o 使用异步调用。当您来自一种大多数函数调用都是同步的语言时,您经常会被这类问题绊倒!
我的目标是插入从 Redis 哈希中获取的值。我正在为节点 js 使用 redis 包。
我的代码如下:
getFromHash(ids) {
const resultArray = [];
ids.forEach((id) => {
common.redisMaster.hget('mykey', id, (err, res) => {
resultArray.push(res);
});
});
console.log(resultArray);
},
函数末尾记录的数组为空,res不为空。请问我能做些什么来填充这个数组?
您需要使用一些控制流程,async library or Promises (as described in reds docs)
当 redis 调用的结果 return 时,将您的 console.log
放入回调中。然后你会看到更多的打印出来。也为您的 .forEach
使用一种控制流模式,因为它当前是同步的。
如果您将代码修改成这样,它会很好地工作:
var getFromHash = function getFromHash(ids) {
const resultArray = [];
ids.forEach((id) => {
common.redisMaster.hget('mykey', id, (err, res) => {
resultArray.push(res);
if (resultArray.length === ids.length) {
// All done.
console.log('getFromHash complete: ', resultArray);
}
});
});
};
在您的原始代码中,您在任何 hget 调用返回之前打印结果数组。
另一种方法是创建一个承诺数组,然后对其执行 Promise.all。
您会在 Node 中经常看到这种行为,请记住它对几乎所有 i/o 使用异步调用。当您来自一种大多数函数调用都是同步的语言时,您经常会被这类问题绊倒!