我的 node.js 代码如下:
var data = "";
//redis client
client.get(key,function(err,value){
data += value;
});
//output
console.log(data);
但是,它什么也没打印。为什么这样?以及如何从回调函数中获取数据?
多谢。
我的 node.js 代码如下:
var data = "";
//redis client
client.get(key,function(err,value){
data += value;
});
//output
console.log(data);
但是,它什么也没打印。为什么这样?以及如何从回调函数中获取数据?
多谢。
回调之外的 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);
我认为这至少值得一票,因为它很简单:)
您向 redis 客户端传递了一个稍后将调用的回调(当数据通过网络返回时),但是在进行 redis 调用之后,您正尝试在 redis 向您发送值之前打印该值。你需要等待redis返回一个值。
尝试这个
var data = "";
//redis client
client.get(key,function(err,value){
data += value;
//output
console.log(data);
});
粘贴我的将回调转换为承诺的 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_ASYNC
或SET_ASYNC
进入所需的文件,您可以像承诺一样将其与 async-await 一起使用。
您的 redis 绑定的client.get
功能是异步的。
查询完redis服务器后会调用回调函数。您应该在回调中打印输出。
var data = "";
//redis client
client.get(key,function(err,value){
data += value;
//output
console.log(data);
});