0

Как преобразовать асинхронный итератор в массив?

9

Проблема: У меня есть асинхронный генератор:

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

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

// Это не работает
const allItems = Array.from(generateItems());
// Это работает, но слишком многословно
const allItems = [];
for await (const item of generateItems()) {
    allItems.push(item);
}

Я понимаю, что это может быть плохой практикой в производственном приложении, но это удобно для прототипирования. Как лучше всего решить эту задачу?

1 ответ(ов)

0

Вот простая функция, которая позволяет конвертировать асинхронный итератор в массив, не прибегая к использованию сторонних библиотек.

async function toArray(asyncIterator){ 
    const arr=[]; 
    for await(const i of asyncIterator) arr.push(i); 
    return arr;
}

Эта функция создает пустой массив arr, затем использует цикл for await...of, чтобы перебрать элементы асинхронного итератора и добавляет каждый элемент в массив. В конце она возвращает этот массив. Вы можете использовать её, если хотите получить все значения из асинхронного итератора в удобном формате.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь