JavaScript生成器-如何在使用.next()调用时跳过yield?

JavaScript生成器-如何在使用.next()调用时跳过yield?,javascript,ecmascript-6,generator,yield,next,Javascript,Ecmascript 6,Generator,Yield,Next,JavaScript生成器允许您以过程方式生成操作 是否可以本机跳过/调用特定产量 鉴于以下示例,如何实现这一点 我希望得到值1、3和5 函数*getVal(){ 产量1; 产量2; 产量3; 产量4; 产量5; } 设x=getVal(); //我只希望生成值1、3和5 //这里val等于1 设val=x.next(); //我现在想让val等于3 val=> //是否可以跳过本机的产量? //…您可以随时调用下一个值而不进行赋值,然后再次调用。下一个并赋值: 函数*getVal(){

JavaScript生成器允许您以过程方式生成操作

是否可以本机跳过/调用特定产量

鉴于以下示例,如何实现这一点

我希望得到值1、3和5

函数*getVal(){
产量1;
产量2;
产量3;
产量4;
产量5;
} 
设x=getVal();
//我只希望生成值1、3和5
//这里val等于1
设val=x.next();
//我现在想让val等于3
val=>
//是否可以跳过本机的产量?

//…
您可以随时调用下一个值而不进行赋值,然后再次调用
。下一个
并赋值:

函数*getVal(){
产量1;
产量2;
产量3;
产量4;
产量5;
} 
设x=getVal();
设val=x.next().value;//1.
控制台日志(val);
x、 next();
val=x.next().value;//3.
控制台日志(val);
x、 next();
val=x.next().value;//5.

控制台日志(val)生成器遵循javascript,因此除了调用
next()
之外,没有太多选项可以控制它们

但是,由于您可以控制生成器的逻辑,因此可以为对
next()
的每个调用定义所需的行为。如果您想跳过数字,只需设法与生成器通信即可

例如,此生成器将生成连续的数字,但会根据传递到
next()

函数*getVal(){
设n=1;
设skip=0

while(n)如果要跳过一个产量,为什么不在分配
x.next()之前调用
x.next()
val
?你不能跳过一个收益率,但你可以调用它并忽略结果。@伊万,谢谢你,我知道你可以直接调用而不赋值,但是跳过而不调用将要跳过的收益率怎么样。@Nicholas,这假设你知道生成器将产生的值,对吗?我想是这样的要记住的是,生成器的行为仍然像函数一样。
yield
会暂停函数直到它再次启动,但是你不能从外部跳过生成器的一部分,就像你不能从内部跳过任何其他函数的一部分一样。所以你是说没有本地JavaScript钩子可以跳过yield?这是一个很酷的方法。@Nich据我所知,不是olas——迭代器协议非常简单,基本上有
next()
由您自由支配。谢谢您,马克,如果您能在回答中说明没有本机方法可以跳过收益率,我倾向于接受此回答作为一种解决方法。需要注意的是,第一次调用
next
不能跳过任何内容。