js中的Generators函數
阿新 • • 發佈:2019-02-03
def The 才有 turn false gen true sage ESS
js中的Generators函數
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 }
捕獲異常
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())
傳遞值給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現在才有用
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
遍歷generator函數
function *test() { yield 1; yield 2; yield 3; } for(let item of test()) { console.log(item); } // 1 2 3
js中的Generators函數