SOURCE

function* integerRange(from, to) {
    for (let i = from; i < to; i++) {
        yield i;
    }
}

function* filter(iter, condidtion) {
    for (let v of iter) {
        if (condidtion(v)) {
            yield v
        }
    }
}

function* filterPrime(iter) {
    let p = iter.next().value
    let rest = iter
    yield p
    for (let v of filterPrime(filter(iter, x => x % p != 0)))
        yield v;
}

function sleep(d){
    return new Promise(resolve => setTimeout(resolve, d));
}
void async function(){
    for(let v of filterPrime(integerRange(2, Infinity))){
        await sleep(1000);
        console.log(v);
    }
}();
console 命令行工具 X clear

                    
>
console