js提前终止迭代器
可选的return()方法用于指定在迭代器提前关闭执行的逻辑。
for-of循环通过break、continue、return或者throw提前退出
class Counter {
constructor(limit) {
this.limit = limit;
}
[Symbol.iterator]() {
let count = 1,
limit = this.limit;
return {
next() {
if (count <= limit) {
return { done: false, value: count++ };
} else {
return { done: true };
}
},
return() {
console.log('提前退出');
return { done: true };
}
};
}
} 测试下: let counter1 = new Counter(5);
for (let i of counter1) {
if (i > 2) {
break;
//throw 'err';
}
console.log(i);
} 结果如下: