1

我正在寻找一种方法,如果可能的话,使用内置函数将异步生成器转换为 JavaScript 中的数组。

与生成器一起使用的示例:

function* foo() { for (let x = 0; x < 10; ++x) yield x; }

console.log(Array.from(foo()));
console.log([...foo()]);

但同样不适用于异步生成器。

async function* bar() { for (let x = 0; x < 10; ++x) yield x; }

console.log(Array.from(bar()));
[...bar()];

什么是标准的,并且可能是最短的方法将异步生成器/迭代器转换为数组,就像普通的生成器/迭代器一样?

我可以使用标准函数吗(最好是 ES5 兼容,如 Array.from)。

为了给我的基于 Scheme 的名为 LIPS 的 lisp 解释器提供上下文,我希望能够调用作为异步生成器的 JavaScript 函数并获得结果。

这适用于 LIPS 的 beta 版本:

(Array.from (foo))
;; ==> #(0 1 2 3 4 5 6 7 8 9)

但这不会:

(Array.from (bar))
;; ==> #()

与 JavaScript 中的相同。

而且我不确定是否需要编写一个将异步生成器转换为数组的函数(也不知道如何命名),或者我可能需要为此编写循环do。使用迭代器协议,我将能够编写不需要任何新 JavaScript 的代码。

但是我不确定异步生成器是否已经存在内置的东西,就像Array.from普通生成器一样。

我知道您可以将 while 与 await 一起用于for await of循环的每个结果,但我正在寻找一个函数,它只会创建一个可以在 LIPS 中使用而无需编写任何额外函数的数组。存在这样的东西吗?

4

0 回答 0