之前看过js的yield,但是很糊涂。现在又看了一下。虽然还是没太明白但是总结了一个小方法方便使用。原理什么的后面再研究。坑什么的用的过程中再填。
勇往直前
看下面。
// 迭代器,传入参数1 如何循环,必须是function *的方法。第二个参数是 循环得到结果如何处理
var Iterator = function(ite, execute=null){
let res = ite();
while(true){
let currRes = res.next();
if(currRes.done===true){ break; }//done了就退出循环
if(execute!==null) { execute(currRes.value); }
}
}
// 这是一组样本数据,两组数据分散在两个数组中,目的是要一个循环输出。
let yd = {items:[[{id:1},{id:2},{id:3}],[{id:4},{id:5}]]};
// ==================== 这个方法定义如何循环
let itg = function *gen(){
for (let i in yd.items){
let citem = yd.items[i];
for (let x of citem){
yield x;
}
}
return -1;
}
// 具体用法,前一个是如何循环(这里就天马行空了!正反循环,跳跳循环),后一个是循环得到数据后如何处理
Iterator(itg, function(r){ console.log(r); });