Как я могу преобразовать асинхронный итератор в массив? - PullRequest
1 голос
/ 02 ноября 2019

Учитывая, что у меня есть асинхронный генератор:

async function* generateItems() {
    // ...
}

Какой самый простой способ перебрать все результаты в массив? Я пробовал следующее:

// This does not work
const allItems = Array.from(generateItems());
// This works but is verbose
const allItems = [];
for await (const item of generateItems()) {
    allItems.push(item);
}

(я знаю, что это потенциально плохая практика в производственном приложении, но это удобно для создания прототипов.)

1 Ответ

0 голосов
/ 02 ноября 2019

Похоже, что библиотека async-iterator-to-array npm делает это:

Установка

npm install --save async-iterator-to-array

Использование

const toArray = require('async-iterator-to-array')

async function * iterator (values) {
  for (let i = 0; i < values.length; i++) {
    yield values[i]
  }
}

const arr = await toArray(iterator([0, 1, 2, 3, 4]))

console.info(arr) // 0, 1, 2, 3, 4
...