在以下路由中,我想使用ioredis'scanStream
方法获取从redis删除的密钥数。如果我像下面这样编码,我总是会在响应中得到{ len: null }
,因为return语句不会等待stream.on
完成。我正在拔头发,但找不到解决方法。咨询吗?
{
route: '/some/path/{somekey}',
handler: (request, h) => {
// redis is an ioredis instance
const { redis, params } = request
const stream = redis.scanStream({
match: `someprefix:${params.somekey}-*`
})
let len = null
stream.on('data', async keys => {
len = keys.length
console.log(`removing ${keys}`)
if (len > 0) {
const pipeline = client.pipeline()
keys.forEach(key => pipeline.del(key))
await pipeline.exec()
}
})
return { len }
}
}
答案 0 :(得分:0)
只需弄清楚,而不是
return { len }
做
return new Promise(resolve => stream.on('end', () => resolve({ len })))
可能会有更清洁的解决方案,但这似乎可以立即完成工作。