Javascript Redis正在输出true而不是所需的值

Javascript Redis正在输出true而不是所需的值,javascript,node.js,function,redis,Javascript,Node.js,Function,Redis,我正在运行nodejs,我想调用此函数: function name(id) { var x = rclient.get(id, function(err, reply) { return reply; }); return x; } 但是,当我尝试使用console.log(name(1))获取函数的输出时,输出是true,而不是存储在redis服务器上的值。这似乎是一个很容易解决的问题,但是,它让我很困惑。您正在使用回调,因此回调函数中的return值不会返回到x 试试

我正在运行nodejs,我想调用此函数:

function name(id) {
  var x = rclient.get(id, function(err, reply) {
    return reply;
  });
  return x;
}

但是,当我尝试使用
console.log(name(1))
获取函数的输出时,输出是
true
,而不是存储在redis服务器上的值。这似乎是一个很容易解决的问题,但是,它让我很困惑。

您正在使用回调,因此回调函数中的
return
值不会返回到
x

试试这个(根据您的redis客户端,我假设您使用的是
节点redis
):

本质上,您对异步/同步调用有点困惑。
x
解析为
true
的事实很可能是
.get
方法和not回调的实现

而不是存储在redis服务器上的值。这似乎是一件简单的事情来解决,然而,它让我感到困惑

当我第一次开始使用Node.js时,我感觉很像你,与大多数语言相比,这很奇怪,但是,你很快就会发现它更自然(特别是使用异步/等待语法)

什么是“err”和“reply”?
只有在服务器出现错误时才使用“err”,而“reply”是服务器响应。

function name(id) {
  return new Promise((resolve, reject) => {
    rclient.get(id, function (err, reply) {
      if (err) {
        return reject(err);
      }

      resolve(reply);
    });
  });
}

// call with
name(1).then((value) => console.log(value)).catch((err) => console.log(err));

// better yet (inside async function)
async main() {
  const value = await name(1);
}

async function name(id) {
  return rclient.get(id);
}

// call with the same as above