什么是在Javascript(Angular)中调用具有一些延迟/睡眠的异步函数的最佳方法。 Setimeout不允许做同样的[重复]

问题描述 投票:1回答:1

这个问题在这里已有答案:

我正在努力在一些异步函数上创建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'表达式只允许在异步函数中。'。

我正在寻找使用一些计时器实现轮询的最佳选项。

javascript angular timer async-await polling
1个回答
-1
投票

您的await调用是在您传递给setTimeout的回调函数内部,该函数不是异步函数。这就是错误的原因。

您可以通过使其异步来解决问题:

setTimeout(async ()=> {
 await this.getRows()
}, 5000);
© www.soinside.com 2019 - 2024. All rights reserved.