我正在寻找一种方法,如果可能的话,使用内置函数将异步生成器转换为 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 中使用而无需编写任何额外函数的数组。存在这样的东西吗?