次のような私の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);
しかし、それは何も印刷しません。なんでそうなの?どうすればコールバック関数からデータを取得できますか?
どうもありがとう。
CALLBACK 外の Redis DATA のドキュメントからの回答
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);
私はこれがその単純さのために少なくとも1つの投票に値すると思います:)
後で(データがネットワーク経由で返されたときに)呼び出されるコールバックを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);
});