// 類數組的生成器
// 類數組的生成器 function fns() { let obj = {0:1,1:2,2:3,length: 3}, [Symbol.iterator]: function() { let index = 0; let that = this; return { next() { return { value: that[index], done: index++ === that.length } } } } let arr = [...obj]; console.log(Array.isArray(arr), arr); } // 自動執行next function fns() { // 給類數組添加迭代方法 let obj = {0:1,1:2,2:3,length: 3}, [Symbol.iterator]: function() { let index = 0; let that = this; while(index === that.length) { yield that[index++] } } let arr = [...obj]; console.log(Array.isArray(arr), arr); } fns(1,2,3,4,5)
#### co模塊javascript
// generator + promise 來使用 let fs = require('fs').promises; // promise 要經過then generator 能夠省略then方法 function* read() { // try{ let content = yield fs.readFile('./name.txt','utf8'); let age = yield fs.readFile(content,'utf8'); let a = yield age + 100; return a; // }catch(err){ // console.log(err); // } } // co 庫 function co(it){ return new Promise((resolve,reject)=>{ // 異步迭代 next function next(data){ let {value,done} = it.next(data); if(!done){ Promise.resolve(value).then(data=>{ next(data) },reject); }else{ resolve(value); } } next(); }); } co(read()).then(data=>{ console.log(data); });
#### 第一次next無效,而且中止到yield的地方。next裏的值會複製給yield複製給的值。java