1. 程式人生 > >js中的Generators函數

js中的Generators函數

def The 才有 turn false gen true sage ESS

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

js中的Generators函數