猎奇网站模板,成都免费网站制作,宁波定制网站建设解决方案,大连网站建设顾问iterator和generator iterator es6: let/const ...展开 迭代器 是一种机制#xff0c;比如在控制台输出Iterator是没有这个类的#xff0c;为不同的数据结构提供迭代循环的机制。 迭代器对象#xff1a;具备next方法#xff0c;next能够对你指定的数据进行迭代循环#x… iterator和generator iterator es6: let/const ...展开 迭代器 是一种机制比如在控制台输出Iterator是没有这个类的为不同的数据结构提供迭代循环的机制。 迭代器对象具备next方法next能够对你指定的数据进行迭代循环next依次取出集合中的每一项。第一次执行next拿第一项第二次执行next拿第二项…… 内部实现 具备Symbol.iterator JS - iterator迭代器 内部实现 ps.done为true结束那个循环为true时那个值也不要了 obj{name:angela,age:18,sex:female}
Object.prototype[Symbol.iterator]function(){let selfthis;let keysObject.keys(self)let index0;return {next(){// 边界校验if(indexkeys.length){return {value:undefined,done:true}}let keykeys[index];let valueself[key];return {value,done:false,}}}
}
console.dir(obj)
for(let value of obj){console.log(value)
}JS中的循环 new Array(99999999) // 这个时候还是一个稀疏数组 稀疏数组是不能使用for of循环的使用fill填充 generator生成器 生成了一个具有迭代器规范的对象迭代器对象 返回一个迭代器对象 通过nextyield控制函数体中的代码一步步执行 每次next得到的value就是每次执行到yield或return后的值 每次next传值作为上次yield的返回结果 yield* 进入生成器执行 串行 终极解决方案递归实现 初级版 判断是否是promise
function wait(timeout){return new Promise(resolve{setTimeout(function() {resolve()}, timeout);})
}
function* asyncFuncton(){yield wait(1000)console.log(第1秒)yield wait(2000)console.log(第2秒)yield wait(3000)console.log(第3秒)
}
itasyncFuncton()
function isPromise(obj){if(typeof obj object obj ! null || typeof obj function){if(obj.then typeof obj.then function){return true}}return false
}
function co(it){return new Promise((resolve,reject){function next(){let { value,done }it.next()console.log(value,done)if(done) return resolve();// 处理value为非promise的情况if(!isPromise(value)) valuePromise.resolve(value)value.then((){next()}).catch((e)reject(e))}next()})}
co(it);完善版