我有发电机
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);
}
我使用以下语法进行无限循环:
let generator = pendingPage()
while(true){
generator.next();
}
我想在其中使用generator.next()
函数。但是发电机不起作用。
我尝试使用for
循环,它运行正常。
那么,它有什么问题以及如何在无限循环中使用generator.next()
?
答案 0 :(得分:2)
我想在其中使用
generator.next()
函数。
这里绝对没有理由使用发电机。普通代码
{
let value = 1;
while (true) {
getPage(value++);
}
}
与调用pendingPage
生成器并永远迭代它完全相同。
那么,它有什么问题?
这是一个无限循环。这就是问题所在。它将永远调用getPage
,并阻止整个过程执行任何其他操作。如果这里的所有内容都是同步的,那么你想要的是什么,但请注意getPage
和specfically service.getValidations
是异步的。阻止所有内容包括阻止异步回调的发生,这就是您没有获取任何日志的原因。使用有界for
循环,迭代在某个时刻结束,并且回调有机会被调用。
我想检索信息并将其放到console.log中。我想用生成器,async / await和无限循环来实现异步。
省略发电机 - 它不是异步的。您只能使用async
/ await
和无限循环来执行此操作:
(async function() {
let value = 1;
while (true) {
await getPage(value++);
}
}());
这仍然是一个无限循环,但它会在每个await
暂停,以允许其他事情发生。