为什么 client.isReady 在我的 Redis 客户端连接中返回未定义

问题描述 投票:0回答:1

我有以下连接到 Redis 服务器的

RedisClient
类:

import { promisify } from 'util';
import { createClient } from 'redis';

class RedisClient {
  constructor() {
    this.client = null;
  }

  async initialize() {
    this.client = RedisClient.getRedisClient();
    await this.waitForReady();
  }

  static getRedisClient() {
    return createClient();
  }

  async waitForReady() {
    return new Promise((resolve, reject) => {
      this.client.on('error', (err) => console.log(`Redis: ${err}`, reject));
      this.client.on('ready', () => console.log('Redis connected'), resolve);
    });
  }

  isAlive() {
    return this.client.isReady;
  }
}

const redisClient = new RedisClient();

(async () => {
  await redisClient.initialize();
})();

export default redisClient;

我希望 Redis 客户端在使用之前准备好,这就是为什么我创建了

waitForReady
函数来等待 Redis 客户端的创建。我用这段代码测试了它:

import redisClient from './utils/redis';

(async () => {
  console.log(redisClient.isAlive());
})();

但是我在控制台日志中收到未定义的输出。为什么会发生我尝试使 redis 客户端的创建异步,但仍然未定义。是因为 isReady 已被弃用还是我应该使用 isOpen 来代替?

javascript node.js redis node-redis
1个回答
0
投票

看起来您正在使用 Node Redis。使用 Node Redis 时,创建后必须连接到客户端。

像这样:

await this.client.connect()

README 中有更新的语法,我还没有尝试过,但看起来很漂亮:

import { createClient } from 'redis';

const client = await createClient()
  .on('error', err => console.log('Redis Client Error', err))
  .connect();

await client.set('key', 'value');
const value = await client.get('key');
await client.disconnect();
© www.soinside.com 2019 - 2024. All rights reserved.