Не имеет смысла, что every
является генератором, так как он не генерирует значения сам, он просто возвращает истину или ложь, поэтому это может быть просто:
function every(iterator, predicate) {
let value, done;
do {
({ value, done } = iterator.next());
if(!predicate(value)) return false;
} while(!done)
return true;
}
every([1, 2, 3].values(), it => it < 3) // false