js中的Generators函数

js中的Generators函数

  1. generator一般操作

    generator函数的作用就是函数体分段执行,yield表示分隔点
    function *test() {
        console.log(1);
        yield 1;
        console.log(2);
        yield 2;
        console.log(3);
        yield 3;
    }
    
    var g = test();
    
    console.log(g.next())        // { value: 1, done: false }
    console.log(g.return(2))     // { value: 2, done: true },return不执行任何函数体,直接结束函数执行
    console.log(g.next())        // { value: undefined, done: true }
    
  2. 捕获异常

    function *test() {
        try {
            yield 1;
            yield 2;
        } catch (error) {
            console.log(error.message);
        }
    }
    
    var g = test();
    
    console.log(g.next())
    console.log(g.throw(new Error("Error")))  // { value: undefined, done: true } 捕获异常,同时结束函数执行
    console.log(g.next())
    
  3. 传递值给generator函数

    function *test() {
        var s;
        s = yield;
        console.log(s);
        s = yield;
        console.log(s);
    }
    
    var g = test();
    
    g.next();   // 第一次调用next会无视传递的value
    g.next(1);  // 第二次传递value现在才有用
    
  4. yield代理到其他的generator函数

    function *test() {
        yield 1;
        yield *other();
    }
    
    function *other() {
        yield 2;
        yield 3;
    }
    var g = test();
    
    console.log(g.next())  // 1
    console.log(g.next())  // 2
    console.log(g.next())  // 3
    
  5. 遍历generator函数

    function *test() {
        yield 1;
        yield 2;
        yield 3;
    }
    
    for(let item of test()) {
        console.log(item);
    }  // 1 2 3
    
原文地址:https://www.cnblogs.com/ye-hcj/p/10350984.html