Как преобразовать асинхронный итератор в массив?
Проблема: У меня есть асинхронный генератор:
async function* generateItems() {
// ...
}
Каков самый простой способ собрать все результаты в массив? Я попробовал следующее:
// Это не работает
const allItems = Array.from(generateItems());
// Это работает, но слишком многословно
const allItems = [];
for await (const item of generateItems()) {
allItems.push(item);
}
Я понимаю, что это может быть плохой практикой в производственном приложении, но это удобно для прототипирования. Как лучше всего решить эту задачу?
1 ответ(ов)
Вот простая функция, которая позволяет конвертировать асинхронный итератор в массив, не прибегая к использованию сторонних библиотек.
async function toArray(asyncIterator){
const arr=[];
for await(const i of asyncIterator) arr.push(i);
return arr;
}
Эта функция создает пустой массив arr
, затем использует цикл for await...of
, чтобы перебрать элементы асинхронного итератора и добавляет каждый элемент в массив. В конце она возвращает этот массив. Вы можете использовать её, если хотите получить все значения из асинхронного итератора в удобном формате.
Использование async/await с циклом forEach
Синтаксис асинхронной стрелочной функции
Сочетание асинхронной функции, await и setTimeout
Как сделать паузу на определенное время в Node.js (JavaScript)?
Использование async/await с методом Array.map