总结注释:不能
yield在 常规 函数中使用,因此不能
yield与一起使用
forEach。这里是“生成的” foreach的示例:
function * foreach (arr, fn) { var i for (i = 0; i < arr.length; i++) { yield * fn(arr[i]) }}function * gen (number) { yield number + 1 yield number + 2 yield number + 3}function * other () { yield * foreach([1, 2, 3], gen)}for (var i of other()) { console.log(i)}
更新 也可以使用这样的助手很好地解决原始问题:
var nodes = { type: 'root', value: [ { type: 'char', value: 'a' }, { type: 'char', value: 'b' }, { type: 'root', value: [ { type: 'char', value: 'c' }, { type: 'char', value: 'd' }, { type: 'char', value: 'e' }, ] }, ],}function * foreach (arr, fn) { var i for (i = 0; i < arr.length; i++) { yield * fn(arr[i]) }}function * value (val) { yield val}function * recursiveGenerator(node) { yield * node.type === 'root' ? foreach(node.value, recursiveGenerator) : value(node.value)}for (var generated of recursiveGenerator(nodes)) { console.log(generated);}
因此,发电机本身变成了单线!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)