當我中斷回圈時,是否可以在for...of不關閉迭代器的情況下回圈迭代器的一部分?
例子:
function* numbers(i=0){
while(true) yield i ;
}
let nums=numbers();
// this loop prints numbers from 0 to 3
for(const n of nums){
if(n>3) break;
console.log(n);
}
// this loop doesn't print anything because `nums` has already been closed
for(const n of nums){
if(n>10) break;
console.log(n);
}
我知道我可以自己呼叫迭代器iterator.next()。但我想知道是否可以使用for...of語法來做到這一點。
uj5u.com熱心網友回復:
不,但是您可以提供不轉發return()到生成器的包裝器:
function unclosed(iterable) {
return {
[Symbol.iterator]() {
const iterator = iterable[Symbol.iterator]();
return {
next: iterator.next.bind(iterator),
return: null,
throw: null,
};
},
};
}
function* numbers(i=0) {
try {
while (true) yield i ;
} finally {
console.log('done');
}
}
const nums = numbers();
// this loop prints numbers from 0 to 3
for (const n of unclosed(nums)) {
console.log(n);
if (n == 3) break;
}
// and this one the numbers from 4 to 10, as well as 'done'
for (const n of nums) {
console.log(n);
if (n == 10) break;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/445723.html
標籤:javascript 迭代器 循环
下一篇:Redux沒有在反應中更新狀態
