npm 'p-queue' и функция генератора вместо async / await - PullRequest
0 голосов
/ 25 октября 2019

Возможно ли использовать Генераторы вместо асинхронной / ожидающей функции внутри queue.add (...) ?

Вместо этого (работает):

queue.add(async () => {
   await Api.getSomeInfo() 
})

Мне нужно использовать что-то вроде этого (это не работает):

queue.add(function* () {
   yield Api.getSomeInfo() 
})

1 Ответ

0 голосов
/ 26 октября 2019

В зависимости от ваших потребностей вы можете написать вспомогательную функцию для преобразования генератора в асинхронную функцию, что-то вроде этого

const toAsync = (generator) => async () => {
  let g = generator()
  let result = g.next();
  while (!result.done) {
    const val = await result.value
    console.log(val)
    result = await g.next();
  }
}

const delay = (arg) => new Promise(r => setTimeout(() => r(arg),1000))

queue.add(toAsync(function* myGenerator() {
  for (let i = 0; i < 5; i++) {
    yield delay(i)
  }
}))
...