gpt4 book ai didi

javascript - 如何检查 Javascript 生成器是否已经退出?

转载 作者:行者123 更新时间:2023-11-30 12:33:07 24 4
gpt4 key购买 nike

我正在尝试用 Javascript 实现一个生成器,并尝试确定我的生成器是否已完成。

那里有很多相互矛盾的信息(我想因为这仍然是一个新功能)。无论如何,我正在使用 Rhino 运行它Java 中的 1.7 版本 4。这是似乎有效的语法:

function poem(foo)
{
console.println("I think that I shall never see");
var a = yield(foo);
console.println("A poem as lovely as a tree");
var b = yield(foo);
console.println("And so I pushed it into the sea");
var c = yield(foo);
console.println("Hee hee hee hee");
}

var gen = poem();

gen.next();
console.println("is done " + gen.next(5).done);

这与 MDN 上的官方文档不同和其他各种网站。 ('function*' 关键字似乎不起作用,而 yield 似乎需要括号。)我还期望 next() 函数返回一个带有 'value' 和 'done' 成员的对象,但我得到 ' undefined' 代替。

我可以捕获在生成器完成后调用 next() 时抛出的异常,但这看起来并不优雅。我还想更明确地说,将它放在 for() 子句中并让 Javascript 为我进行检查。

有没有更好的方法来检查我的生成器何时结束?

最佳答案

function*是 ECMAScript 6 中定义的生成器语法,这是最近的一项功能。

Rhino 1.7 很古老,也支持“生成器”,但它的语法是非标准的(当时,function* 语法甚至不存在!)。您可以在 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators#Generators.3A_a_better_way_to_build_Iterators 找到有关此旧语法的文档。 .当这个旧生成器完成时,将抛出一个 StopIteration 异常。所以你必须使用 try-catch 来检测生成器终止。

function legacyGenerator() {
yield 1;
}
var gen = legacyGenerator();
gen.next(); // 1
gen.next(); // throws StopIteration

关于javascript - 如何检查 Javascript 生成器是否已经退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26993639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com