我的目标是插入从redis散列得到的值。我正在为node js使用redis包。
我的代码如下:

getFromHash(ids) {
    const resultArray = [];
    ids.forEach((id) => {
      common.redisMaster.hget('mykey', id, (err, res) => {
        resultArray.push(res);
      });
    });
    console.log(resultArray);
  },

函数末尾记录的数组为空,res不为空。我能做些什么来填满这个数组吗?

最佳答案

如果您将代码修改为类似这样的内容,它将很好地工作:

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调用返回之前打印结果数组。
另一种方法是创造一系列的承诺,然后做一个承诺。
在node中,您会经常看到这种行为,记住它几乎对所有i/o都使用异步调用。当您来自一种大多数函数调用都是同步的语言时,您会经常被这种问题绊倒!

10-06 10:38