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