鉴于我有一个异步生成器:
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);
}
(我知道这在Production应用程序中可能是不好的做法,但对于原型制作很方便。)
答案 0 :(得分:1)
您所知道的是唯一的解决方案。这是TypeScript函数:
async function gen2array<T>(gen: AsyncGenerator<T>): Promise<T[]> {
const out: T[] = []
for await(const x of gen) {
out.push(x)
}
return out
}
答案 1 :(得分:1)
这是一个简单的函数,可以将异步迭代器转换为数组,而不必包含整个程序包。
async function toArray(asyncIterator){
const arr=[];
for await(const i of asyncIterator) arr.push(i);
return arr;
}
答案 2 :(得分:0)
就像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