function* helloWorldGenerator() { yield 'hello'; yield 'world'; return 'ending'; } var hw = helloWorldGenerator(); hw.next() // { value: 'hello', done: false }
function* helloWorldGenerator() { yield 'hello'; yield 'world'; return 'ending'; } var hw = helloWorldGenerator(); hw.next() // { value: 'hello', done: false }
function* iterEntries(obj) { let keys = Object.keys(obj); for (let i=0; i < keys.length; i++) { let key = keys[i]; yield [key, obj[key]]; } } let myObj = { foo: 3, bar: 7 }; // for...of 拿到的值就是yield表達式的值,因此才能結構。 for (let [key, value] of iterEntries(myObj)) { console.log(key, value); } // foo 3 // bar 7
function* iterEntries(obj) { let keys = Object.keys(obj); for (let i=0; i < keys.length; i++) { let key = keys[i]; yield [key, obj[key]]; } } let myObj = { foo: 3, bar: 7 }; // for...of 拿到的值就是yield表達式的值,因此才能結構。 for (let [key, value] of iterEntries(myObj)) { console.log(key, value); } // foo 3 // bar 7
function showLoadingScreen() { console.log('step1'); } function loadUIDataAsynchronously() { setTimeout(() => { loader.next("異步操做sync"); // 把結果傳遞出去 }, 2000); } function hideLoadingScreen() { console.log('step3'); } function* loadUI() { showLoadingScreen(); var res = yield loadUIDataAsynchronously(); console.log(res) //拿到異步執行的結果 hideLoadingScreen(); } var loader = loadUI(); loader.next()
function showLoadingScreen() { console.log('step1'); } function loadUIDataAsynchronously() { setTimeout(() => { loader.next("異步操做sync"); // 把結果傳遞出去 }, 2000); } function hideLoadingScreen() { console.log('step3'); } function* loadUI() { showLoadingScreen(); var res = yield loadUIDataAsynchronously(); console.log(res) //拿到異步執行的結果 hideLoadingScreen(); } var loader = loadUI(); loader.next()
function* F() { yield this.name = 'generator' } F.prototype.getName = function() { console.log(this.name) //undefind 這裏拿不到定義的狀態 console.log(this) // F {<suspended>} console.log('gen') // 'gen' }; // 聲明一個空的對象 var obj = {}; var f = F.call(obj); f.next() f instanceof F; // true f.getName(); //標註在實例方法中 console.log(obj.name) //這裏也是隻用執行了next()方法後才能打印出 generator' ,不然就是undefined
function* F() { yield this.name = 'generator' } F.prototype.getName = function() { console.log(this.name) //undefind 這裏拿不到定義的狀態 console.log(this) // F {<suspended>} console.log('gen') // 'gen' }; // 聲明一個空的對象 var obj = {}; var f = F.call(obj); f.next() f instanceof F; // true f.getName(); //標註在實例方法中 console.log(obj.name) //這裏也是隻用執行了next()方法後才能打印出 generator' ,不然就是undefined
或es6
摘自阮一峯es6 function* F() { yield this.name = 'generator' } F.prototype.getName = function() { console.log(this.name) //undefind 這裏拿不到定義的狀態 console.log(this) // F {<suspended>} console.log('gen') // 'gen' }; // F本身原型 var f = F.call(F.prototype); f.next() f instanceof F; // true f.getName(); //標註在實例方法中 console.log(f.name) //這裏也是隻用執行了next()方法後才能打印出 generator' ,不然就是undefined
function* F() { yield this.name = 'generator' } F.prototype.getName = function() { console.log(this.name) //undefind 這裏拿不到定義的狀態 console.log(this) // F {<suspended>} console.log('gen') // 'gen' }; // F本身原型 var f = F.call(F.prototype); f.next() f instanceof F; // true f.getName(); //標註在實例方法中 console.log(f.name) //這裏也是隻用執行了next()方法後才能打印出 generator' ,不然就是undefined