Generator的throw方法,try-catch错误后继续执行yield语句
发布于 10 年前 作者 steamwheedle 7913 次预览 最后一次回复是 10 年前 来自 问答
http://es6.ruanyifeng.com/#docs/generator 学习Generator的throw方法遇到个问题。
var gen = function* gen() {
try {
yield console.log('hello');
yield console.log('world');
}
catch (e) {
console.log(e);
}
yield console.log('test');
yield console.log('end');
}
var g = gen();
g.next();
g.throw('a');
g.next();
// hello
// a
// test
// end
执行g.throw(‘a’),catch到错误之后,为什么会执行一个yield语句?输出了test。
重新说明下: g.throw(‘a’)执行后, 输出了两个,一个是a,一个是test。 之后的g.next(),输出了end。
这里的问题是, yield console.log(‘test’),这条语句为什么会被g.throw(‘a’)执行,不应该是下一条的语句g.next()执行吗?
6 回复
??没看懂问题。不仅输出了 test,还输出了 end 啊
@alsotang 重新编辑了。能看下是什么原因吗?
呃。。
.throw的行为就长这样,我另外找了一个例子,不知可不可以帮助理解这个地方。@alsotang thx,throw这么搞不科学- -
问题在哪里?你不是catch了吗?往下执行有什么,问题?
@iamcc 没问题,只是觉得throw-catch之后的yield语句,应该我自己调用next去执行,而不是它自己去执行了。