这个next()
,throw()
、和return()(返回)
当前生成器的方法都被转发到底层迭代器。
常量可迭代={[符号迭代器](){让计数=0;返回{下一个(v){console.log(“next called with”,v);计数++;返回{value:count,done:false};},返回(v){console.log(“return called with”,v);return{value:“iterable return value”,done:true};},抛出(v){console.log(“throw called with”,v);返回{value:“iterable thrown value”,完成:true};},};},};函数*gf(){yield*可迭代;return“gf返回值”;}常数gen=gf();控制台.log(gen.next(10));//下一次调用时未定义;第一个next()调用的参数总是被忽略//{value:1,done:false}控制台.log(gen.next(20));//下一个调用为20//{value:2,done:false}console.log(gen.return(30));//用30调用返回//{value:'可迭代返回值',done:true}控制台.log(gen.next(40));//{value:未定义,已完成:true};发电机已关闭常数gen2=gf();console.log(gen2.next(10));//next调用时未定义//{value:1,done:false}控制台.log(gen2.throw(50));//掷50分//{value:“gf返回值”,完成:true}控制台.log(gen.next(60));//{value:未定义,done:true};发电机已关闭
如果返回()
/throw()
底层迭代器返回的方法完成:false
,电流发生器继续执行产量*
继续委托给底层迭代器。
常量可迭代={[符号迭代器](){让计数=0;返回{下一个(v){console.log(“next called with”,v);计数++;返回{value:count,done:false};},返回(v){console.log(“return called with”,v);return{value:“可迭代的return value”,done:false};},};},};函数*gf(){产量*可迭代;return“gf返回值”;}常数gen=gf();控制台.log(gen.next(10));//next调用时未定义//{value:1,done:false}console.log(gen.return(20));//用20调用返回//{value:'可迭代返回值',done:false}控制台.log(gen.next(30));//{value:2,done:false};发电机未关闭
如果底层迭代器没有throw()
方法和生成器throw()
被称为,产量*
抛出错误。
常量可迭代={[符号迭代器](){让计数=0;返回{下一个(v){计数++;返回{value:count,done:false};},};},};函数*gf(){产量*可迭代;return“gf返回值”;}const gen=gf();gen.next();//First next()启动yield*表达式发电机(20);//TypeError:迭代器不提供“throw”方法。