2016-01-23 54 views
3

您可以从封闭收益率?ES6/ES2015在封闭收益率内的函数*

// I want the following to work but instead I get: 
// Uncaught SyntaxError: missing) after argument list(…) 

function* test() { 
    yield 1; 
    [2,3].map(x => yield x); 
    yield 4; 
} 

var gen = test(); 
console.log(gen.next().value); // 1 
console.log(gen.next().value); // 2 
console.log(gen.next().value); // 3 
console.log(gen.next().value); // 4 
+0

只是不,你不能。 – Bergi

+0

当闭包不是从“内部”(无论何种定义)被调用时,闭包会做什么? – Bergi

回答

1

您应该使用yield*的控制研究传递到其他迭代对象 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/yield*

也试图yield非发电机的功能,你不能里面。只需使用return

function* test() { 
    yield 1; 
    yield* [2,3].map((x) => {return x}); 
    yield 4; 
} 

var gen = test(); 
console.log(gen.next().value); // 1 
console.log(gen.next().value); // 2 
console.log(gen.next().value); // 3 
console.log(gen.next().value); // 4 
+2

请注意,在这种情况下,'map'会被急切地评估到数组中,我想这不是OP的意思。 – Bergi