Pha*_*yen 3 javascript generator throw
我知道使用next()方法将迭代器前进到yield关键字的下一个位置,并返回包含yield表达式结果的对象,如下所示:
产量增加一倍(40);=>调用iterator.next()将返回类似{done:false,value:80}的信息
但是,我不太清楚throw()方法是否还会将迭代器前进并返回下一个yield的表达式,除了将异常抛出到生成器中。文档说像这样:
throw()方法通过向生成器中抛出错误来恢复生成器的执行,并返回一个对象,该对象具有完成的两个属性和值。
当我们调用iterator.throw()时,是否会将异常抛出到生成器中(正确捕获了异常),并前进到下一个yield关键字并返回yield表达式的结果?
请让我知道是否需要包含代码片段来演示这一点,因为这是我在Stackoverflow上的第一篇文章。
谢谢!!!
它确实从收到错误的收益率提高了生成器。但是,由于在throwyield时引发了异常,除非生成器代码准备好捕获并吞下该异常,否则生成器将不会继续执行并完成(将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());Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
938 次 |
| 最近记录: |