我编写了一个使用ioredis的模块,并进行了一些测试。
问题是,当我在群集模式下连接ioredis时,即使我叫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
})
答案 0 :(得分:0)
您无需手动使用Promise或关闭节点连接。只需致电
supplier.id | count(*)
1 3
2 0
3 1
4 9
在群集模式下,它将自行关闭所有打开的连接。查看disconnect method in sources。
如果您仍然需要手动关闭,请勿使用诺言-断开连接不会返回诺言。只是
redis.disconnect()
答案 1 :(得分:0)
我遇到了同样的问题,通过调用 redis.disconnect()
解决了,每个客户端都应该断开连接。