ECMAScript 6应该带来生成器函数和迭代器。生成器函数(具有function*语法)返回迭代器。迭代器有一个next方法,当重复调用时,它执行生成器函数的主体,在每个yield操作符上重复暂停和恢复执行。
发电机上的ECMAScript 6维基还引入了“委托产品”yield*运算符如下:
yield*操作符将委托给另一个生成器。这为合成生成器提供了一种方便的机制。
“委托给另一个生成器”是什么意思?如何使用yield*“方便地组合生成器”?
您可以在Nodev0.11.3中使用--harmony-generators标志来播放生成器。
发布于 2013-07-05 15:07:58
委托给另一个生成器意味着当前生成器本身停止产生值,而产生另一个生成器产生的值,直到它耗尽它为止。然后,它恢复产生自己的价值,如果有的话。
例如,如果secondGenerator()从10生成数字到15,而firstGenerator()生成从1到5的数字,但是在生成2之后委托给secondGenerator(),那么firstGenerator()生成的值将是:
1, 2, 10, 11, 12, 13, 14, 15, 3, 4, 5
function* firstGenerator() {
yield 1;
yield 2;
// Delegate to second generator
yield* secondGenerator();
yield 3;
yield 4;
yield 5;
}
function* secondGenerator() {
yield 10;
yield 11;
yield 12;
yield 13;
yield 14;
yield 15;
}
console.log(Array.from(firstGenerator()));
发布于 2017-05-24 01:16:41
委派的产量不必委托给另一个生成器--只委托,而是委托给任何迭代器,因此第一个答案有点不确定。考虑一下这个简单的例子:
function* someGenerator() {
yield 0;
yield [1,2,3];
yield* [1,2,3];
}
for (v of someGenerator()) {
console.log(v);
}
生成器本身没有另一个函数,但是yield* [1, 2, 3]将委托给Array.prototype[@@iterator]方法。
发布于 2016-02-05 16:22:00
function *gimme1to2_10to15_3to5() {
var ten = gimme10to15();
yield 1; yield 2;
for (var i = 10; i <= 20; i++)
yield *ten;
yield 3; yield 4; yield 5;
}
function *gimme10to15() {
for (var i = 10; i <= 15; i++)
var x = yield i;
}
let gen = gimme1to2_10to15_3to5();
var ar = [];
for (var i = 0; i < 12; i++)
{
var r = gen.next();
ar [i] = r.value + (r.done ? "!" : "..");
}
console.log (ar.join (", "));结果是
1.., 2.., 10.., 11.., 12.., 13.., 14.., 15.., 3.., 4.., 5.., undefined!备注
https://stackoverflow.com/questions/17491779
复制相似问题