4

我的 node.js 代码如下:

var data = "";
//redis client
client.get(key,function(err,value){
    data += value;
});
//output
console.log(data);

但是,它什么也没打印。为什么这样?以及如何从回调函数中获取数据?

多谢。

4

4 回答 4

3

回调之外的 Redis 数据文档的答案

        const redis = require('redis');
        const redisClient = redis.createClient(process.env.REDIS_URI);

        // using Node.js >= v8 built-in utility
        const { promisify } = require('util');

        // forcing function to return promise
        const getAsync = promisify(redisClient.get).bind(redisClient);
        const value = await getAsync(key);

        console.log('value of redis key outside the callback is', value);
       

我认为这至少值得一票,因为它很简单:)

于 2020-08-10T23:09:09.797 回答
2

您向 redis 客户端传递了一个稍后将调用的回调(当数据通过网络返回时),但是在进行 redis 调用之后,您正尝试在 redis 向您发送值之前打印该值。你需要等待redis返回一个值。

尝试这个

var data = "";
//redis client
client.get(key,function(err,value){
    data += value;
    //output 
    console.log(data);
});
于 2013-03-31T09:19:45.617 回答
0

粘贴我的将回调转换为承诺的 Redis 文件,以防万一。它在打字稿和类型安全中。您应该会收到智能感知和自动完成功能。

import redis from "redis"
import { promisify } from "util"
import { redisHost as host, redisPort as port } from "../../configKeys"

const client = redis.createClient({
  port,
  host,
})

client.on("connect", () => {
  console.log(`Redis Client connected on port ${port}`)
})

client.on("ready", () => {
  console.log("Redis Client ready to use..")
})

client.on("error", (err) => {
  console.log(err.message)
})

client.on("end", () => {
  logCommon.debug("Redis Client disconnected")
})

process.on("SIGINT", () => {
  client.quit()
})

export const GET_ASYNC = (promisify<string>(client.GET).bind(
  client
) as unknown) as (key: string) => Promise<string | null>

export const SET_ASYNC = (promisify<string, string, string, number>(
  client.SET
).bind(client) as unknown) as (
  key: string,
  value: string,
  mode: string,
  duration: number
) => Promise<"OK" | null>

export const DELETE_ASYNC = (promisify<string>(client.DEL).bind(
  client
) as unknown) as (key: string) => Promise<number | null>

export default client

导入GET_ASYNCSET_ASYNC进入所需的文件,您可以像承诺一样将其与 async-await 一起使用。

于 2021-06-15T06:59:55.213 回答
-1

您的 redis 绑定的client.get功能是异步的。

查询完redis服务器后会调用回调函数。您应该在回调中打印输出。

var data = "";
//redis client
client.get(key,function(err,value){
    data += value;
    //output
    console.log(data);
});
于 2013-03-31T09:23:22.803 回答