用于ES6 Generator的hasNext()

Yas*_*obi 6 javascript iterator generator ecmascript-6

我将如何为生成器实现hasNext()方法。我尝试了许多选项,例如将生成器添加为return语句并从闭包中屈服。获取第一个值将其打印出来,然后使用while等,但是它们都没有实际起作用。

我知道我可以使用诸如of或while之类的如何循环来自generator的JavaScript迭代器? 但仍然想知道是否可以添加hasNext()。

function *range(start,end){

    while(start < end){
        yield start; 
        start++
    }
}

let iterator = range(1,10); 

// so I can do something like this. 
while(iterator.hasNext()){
   console.log(iterator.next().value); 
}
Run Code Online (Sandbox Code Playgroud)

Ber*_*rgi 6

for…of循环迭代器的简单非方法是

for (let iterator = range(1, 10), r; !(r = iterator.next()).done; ) {
    console.log(r.value);
}
Run Code Online (Sandbox Code Playgroud)

如果您确实想使用hasNext,也可以这样做,但这有点奇怪:

const iterator = range(1, 10);
iterator.hasNext = function hasNext() {
    const r = this.next();
    this.current = r.value;
    return !r.done;
};
while (iterator.hasNext()) {
    console.log(iterator.current);
}
Run Code Online (Sandbox Code Playgroud)