【问题标题】:redis.js get is returning true instead of the valueredis.js 获取返回 true 而不是值
【发布时间】:2019-01-12 02:59:59
【问题描述】:

我试图将盐的值返回给我的函数,但我得到的都是真的。

function getUserSalt(client, username) {

    let salt = client.HGET(username, "salt", function (error, result){
        if(error) throw error;

        return result;
    })

    return salt;
}

【问题讨论】:

  • HGET 是异步函数吗?在这种情况下,您应该使用 Promise 来获取值。

标签: javascript node-redis


【解决方案1】:

您错误地使用了回调。

function getUserSalt(client, username, callback) {

return client.HGET(username, "salt", callback);

}

现在,这可以与回调一起使用,它的第一个参数将接收错误,第二个参数接收盐。

或者,您可以使用此处所述的承诺:https://github.com/NodeRedis/node_redis#promises

一个样本是:

const {promisify} = require('util');
const getUserSaltAsync = promisify(getUserSalt);

getUserSaltAsync(client, "some_username").then(salt => {console.log(salt);});

当然,您还需要以某种方式处理来自 Promise 的错误。

【讨论】:

  • 谢谢!我从来没有学过如何使用异步 js,甚至没有学过回调是什么。所以现在我知道要学什么了。有什么网站或地方可以帮助您学习这个主题,您可以推荐吗?
  • 我建议先了解回调,然后继续 Promise,然后再学习 async/await。在生产中,我建议完全远离回调或同步代码,因为例如回调地狱之类的问题。根据在哪里学习 - 我不确定,因为我从来没有在一个地方学习过。这似乎接近主题:scotch.io/tutorials/javascript-promises-for-dummies。根据学习什么是回调 - 我建议在节点中搜索同步或异步的含义。附言它在输入时发布 cmets,因此进行了编辑。
  • 肯定会这样做。感谢您的所有帮助!
【解决方案2】:
import redisClient from "../config/redisConfig";
import util from "util";
let hgetall = util.promisify(redisClient.hgetall).bind(redisClient);

await hgetall("key") // This way you will be getting the value instead of true

【讨论】:

  • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。
猜你喜欢
  • 2020-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-20
  • 2017-09-24
  • 1970-01-01
  • 2016-03-23
  • 2014-04-24
相关资源
最近更新 更多