Angular 在给定的毫秒后停止发出 api 请求,即使它没有成功

Angular stop making api request after given milliseconds even if it's not succeeded

我正在尝试从后端获取状态,直到满足条件,但我不想通过永远发出请求来使服务器过载 :)。我想在一分钟后停止发出请求。 这是代码

  this.statusService
.getStatus(this.itemId).pipe(
repeatWhen(obs => obs.pipe(delay(500))),
filter(data => {
  if(data.status === 'done'){
    return true;
  }else{
    return false;
  }
   }),
take(1)
).subscribe(result =>{
  console.log(‘done')
});

我尝试了 timeout() 但它并没有停止发出请求

  this.statusService
.getStatus(this.itemId).pipe(
 timeout(60000),
repeatWhen(obs => obs.pipe(delay(500))),
filter(data => {
  if(data.status === 'done'){
    return true;
  }else{
    return false;
  }
   }),
take(1)
).subscribe(result =>{
  console.log(‘done')
});

更新:

一个简单的解决方案可以是:

const apiCall$ = this.statusService.getStatus(this.itemId)
  .pipe(
    delay(1000),
    repeat(),
    filter(data => (data.status === 'done'))
  );

const timeout$ = of(false).pipe(delay(3000));

// The observable to emit first is used
race([apiCall$, timeout$])
  .pipe(take(1))
  .subscribe(result => {
    console.log(result);
  });