Как закрыть ioredis (модуль nodejs) при подключении к кластеру? - PullRequest
0 голосов
/ 17 декабря 2018

Я написал модуль, который использует ioredis и некоторые тесты, чтобы пойти вместе с ним.

Проблема в том, что, когда я подключаю ioredis в кластерном режиме, mocha зависает после завершения, даже еслиЯ звоню redis.disconnect().

Кажется, что-то все еще связано с циклом событий.

Вот мой тест:

it('connects to redis cluster mode', async () => {
  //redisClientFactroy is my module
  let redisClientFactory = redisClientFactoryInit({
    host: 'localhost',
    port: 7000
  })
  // it returns a redis.cluster instance if it recognizes it
  // 'redis' here is a cluster client
  let redis = await redisClientFactory.createClient()
  await redis.set('took123', 1);
  let took = await redis.get('took123')
  expect(took).to.eql('1')
  let nodes = redis.nodes()
  await Promise.all(nodes.map((node) => {
    node.disconnect()
    console.log("node disconnected")
  }))
  redis.disconnect()

  //tests are marked as done and passing, but mocha does not exit
})

1 Ответ

0 голосов
/ 19 декабря 2018

Вам не нужно использовать обещания или закрывать соединения узлов руками.Просто позвоните

redis.disconnect()

В кластерном режиме он сам закроет все открытые соединения.Посмотрите на метод отключения в источниках .

Если вам все еще нужно закрыть руками, не используйте обещания - отключите, не возвращайте их.Всего

nodes.map((node) => node.disconnect())
...