从数组构造生成器函数

时间:2016-11-03 20:10:34

标签: javascript asynchronous generator yield

我正在尝试从数组构建生成器函数。最简单的例子是:

    const array = [1,2,3,4]

    function * createGenerator () {
        array.map(function(elem){
            yield elem
        }
    }  

我希望:

function * createGenerator () {
        yield 1
        yield 2
        yield 3
        yield 4
    } 

此外,如果我想添加这样的开关语句:

function processServerActions (array) {
    for (let elem in array) {
        switch(elem) {
            case 1:
                yield 1111
            case 2:
                yield 22222
            case 3:
                yield 333333
                yield 444444
            case 4:
                yield 55555
        }
    }

}

但是没有用。我错过了什么?

谢谢!

1 个答案:

答案 0 :(得分:3)

回调只能返回回调。为了产生生成器函数,yield必须在函数内部,但在嵌套回调之外。

最好使用for ... of来产生一个值。



function* createGenerator() {
    for (let elem of array){
        yield elem;
    }
}  

const array = [1,2,3,4],
      c = createGenerator();

console.log([...c]);




for (let elem of array)需要of而不是in



function* createGenerator() {
    for (let elem of array) {
        switch(elem) {
            case 1:
                yield 1111;
                break;
            case 2:
                yield 22222;
                break;
            case 3:
                yield 333333;
                yield 444444;
                break;
            case 4:
                yield 55555;
        }
    }
}

const array = [1,2,3,4],
      c = createGenerator();

console.log([...c]);