Как вернуть результат обратного вызова события в обработчике маршрута hapijs (версия 17+) - PullRequest
0 голосов
/ 18 июня 2019

В следующем маршруте я хочу получить количество ключей, удаленных из redis, используя метод ioredis 'scanStream.Если я закодирую его следующим образом, я всегда получу { 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 }
  }
}

1 Ответ

0 голосов
/ 19 июня 2019

Только что понял, вместо

return { len }

do

return new Promise(resolve => stream.on('end', () => resolve({ len })))

Могут быть более чистые решения, но, похоже, работа на данный момент уже выполнена.

...