如何在 while 循环中使用 generator.next()?

How to use generator.next() inside while loop?

我有发电机

function* pendingPage() {
    let value = 1;
    while (true)
        yield getPage(value++);
}

我有getPage()功能

async function getPage(value) {
    const page = await service.getValidations(value);
    (page.data.customers.length === 0) ? service.isCustomersFinished = false : console.log(page.data.customers);
}

我有 while 无限循环,语法如下:

let generator = pendingPage()
while(true){
   generator.next();
}

我想在其中使用 generator.next() 函数。但是发电机不工作。

我尝试使用 for 循环,它工作正常。

那么,它有什么问题以及如何在无限 while 循环中使用 generator.next()

And I want to use generator.next() function inside it.

绝对没有理由在这里使用生成器。明码

{
    let value = 1;
    while (true) {
        getPage(value++);
    }
}

与调用 pendingPage 生成器并永远迭代它完全相同。

So, what is the problem with it?

这是一个无限循环。那就是问题所在。它会永远调用 getPage ,并阻止整个过程做任何其他事情。如果此处的所有内容都是同步的,这就是您想要的,但请注意 getPage 并且特别是 service.getValidations 是异步的。阻止一切 包括阻止异步回调的发生,这就是您得不到任何日志的原因。使用有界 for 循环,迭代在某个时刻结束,回调有机会被调用。

I want to retrieve info and put it to console.log. I want to do it async with generator, async/await and infinite while loop.

省略生成器 - 它无论如何都不是异步的。你只能用 async/await 和无限循环来做到这一点:

(async function() {
    let value = 1;
    while (true) {
        await getPage(value++);
    }
}());

这仍然是一个无限循环,但它会在每个 await 暂停以允许其他事情发生。