gpt4 book ai didi

Javascript 生成器 throw() 方法推进迭代器?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:01:12 26 4
gpt4 key购买 nike

我知道使用 next() 方法将迭代器推进到 yield 关键字的下一个位置并返回包含 yield 表达式结果的对象,如下所示:

yield double(40); => call iterator.next() would return something like {done:false, value:80}

但是,除了向生成器抛出异常之外,throw() 方法是否还会推进迭代器并返回下一个 yield 表达式,我不是很清楚。文档是这样说的:

The throw() method resumes the execution of a generator by throwing an error into it and returns an object with two properties done and value.

当我们调用iterator.throw()时,它会不会将异常抛给生成器(异常被正确捕获),并前进到下一个yield关键字并返回yield表达式的结果?

如果我需要包含代码片段来演示这一点,请告诉我,因为这是我在 Stackoverflow 上的第一篇文章。

谢谢!!!

最佳答案

它确实从收到错误的 yield 中推进生成器。但是,由于 throw 在 yield 点引发了异常,除非生成器代码准备好捕获异常并吞下它,否则生成器将不会恢复并完成(done 设置为 true ), 将未捕获的异常冒泡到迭代器调用站点。

这是一个简单的演示,注意 genDrunk 呕吐 ;) -

function* genSober() {
while(true) {
try {
yield 42;
} catch(e) {
console.log("I don't drink at work!");
}
}
}

var g = genSober();
console.log(g.next());
// { value: 42, done: false }
g.throw("Have some wine...");
console.log(g.next());

function* genDrunk() {
while(true) {
yield 42;
}
}

g = genDrunk();
console.log(g.next());
try {
g.throw("Have some wine...");
}
catch (e){
}
console.log(g.next());

关于Javascript 生成器 throw() 方法推进迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37674321/

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