【发布时间】:2019-06-19 05:11:10
【问题描述】:
在下面的路由中,我想通过ioredis'scanStream方法获取从redis中删除的key的数量。如果我像下面这样编码,我总是会在响应中得到{ 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 }
}
}
【问题讨论】:
-
但是您可以轻松地将
stream.on分离到它自己的函数中并返回一个承诺......现在您可以await获得stream.on -
@balexandre 应该可以。但是我发现了另一种方法,请参阅我对自己问题的回答。