JavaScript ES6生成器在下一个方法之前捕获错误
我开始学习迭代器/生成器,有时我会看到一些奇怪的部分。目前我不明白为什么我的代码是这样工作的 下面的代码示例是我的主要代码JavaScript ES6生成器在下一个方法之前捕获错误,javascript,generator,Javascript,Generator,我开始学习迭代器/生成器,有时我会看到一些奇怪的部分。目前我不明白为什么我的代码是这样工作的 下面的代码示例是我的主要代码 function* makeGenerator() { try { yield 1; yield 1; yield 1; } catch (e) { console.log(e); } } const generator = makeGenerator(); 当我在抛出前使用下一个方
function* makeGenerator() {
try {
yield 1;
yield 1;
yield 1;
} catch (e) {
console.log(e);
}
}
const generator = makeGenerator();
当我在抛出前使用下一个方法时,此代码正常工作
console.log(generator.next()); // { done: false, value: 1 }
console.log(generator.throw("WTF?")); // "WTF"
console.log(generator.next()); // { done: true, value: undefined }
函数*makeGenerator(){
试一试{
产量1;
产量1;
产量1;
}捕获(e){
控制台日志(e);
}
}
const generator=makeGenerator();
console.log(generator.next());//{完成:false,值:1}
console.log(生成器.throw(“WTF?”);//“WTF”
console.log(generator.next());//{done:true,value:undefined}
通过生成器抛出错误的正确方法是将它们包装在一个try…catch
中,因为如果没有捕捉到错误,您就在那里创建了一个错误,那么它将落入外部调用代码(如果有)中,如果没有捕捉,则会杀死脚本
function* makeGenerator() {
try {
yield 1;
yield 1;
yield 1;
} catch (e) {
console.log(e);
}
}
const generator = makeGenerator();
console.log(generator.next());
try {
generator.throw(new Error("WHOOPS"));
} catch(e) {
console.log(e); // shows the error
}
执行此语句时:
const generator = makeGenerator();
…函数体中的makeGenerator
代码尚未执行,因此其try/catch
块尚未生效。只有在执行generator.next()
时,makeGenerator
函数体中的代码才会开始执行,直到下一个产生
。此时,try/catch
块生效
所以。。。如果在第一个generator.next()
调用之前调用generator.throw()
,则触发的异常不由makeGenerator
代码处理。您的代码因未处理的异常而中断。因此,generator.throw()
(在您的第二个代码版本中)之后的任何内容都不会执行