如何在 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
暂停以允许其他事情发生。
我有发电机
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
暂停以允许其他事情发生。