这个问题在这里已有答案:
我正在努力在一些异步函数上创建API轮询,该异步函数是从另一个异步函数调用的。像下面的代码:
public generatePreview() {
this.apiService.firstAPI().subscribe(async headers => {
// Do some processing over here
await this.getRows();
});
}
public async getRows() {
this.apiService.secondAPI().subscribe(async rows => {
if (rows.status === 'INGESTION_IN_PROGRESS') {
console.log('inside');
setTimeout(()=>{return await this.getRows()}, 5000);
} else if (rows.status === 'COMPLETED') {
// Stopping Logic
}
});
}
说明:generatePreview函数调用firstAPi函数,调用getRows函数,该函数具有轮询逻辑。如果异步调用响应的状态为“INGESTION_IN_PROGRESS”,则应再次调用getRows(有一些延迟)。当我把它放在setTimeout中时,我得到以下错误''await'表达式只允许在异步函数中。'。
我正在寻找使用一些计时器实现轮询的最佳选项。
您的await调用是在您传递给setTimeout的回调函数内部,该函数不是异步函数。这就是错误的原因。
您可以通过使其异步来解决问题:
setTimeout(async ()=> {
await this.getRows()
}, 5000);