1

我编写了一个使用 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
})
4

2 回答 2

2

您不需要手动使用 Promise 或关闭节点连接。打电话

redis.disconnect()

在集群模式下,它会自行关闭所有打开的连接。查看源中的断开连接方法

如果您仍然需要手动关闭,请不要使用承诺 - 断开连接不要返回它们。只是

nodes.map((node) => node.disconnect())
于 2018-12-19T15:39:43.537 回答
0

我遇到了同样的问题,通过电话解决了redis.disconnect(),每个客户端都应该断开连接。

于 2021-01-28T03:03:29.627 回答