如何在 Angular / NgRx Subscription with Interval 中设置错误延迟

How to set a delay on Error in Angular / NgRx Subscription with Interval

我希望我的 interval 在出现错误时等待 5 秒,然后再尝试点击我的 service。就像成功调用时一样。

使用 Angular 12 和 NgRx 6,我的 ngOnInit()

中有以下代码
    this.switchMapSubscription = interval(5000).pipe(
        startWith(0),
        switchMap(() => this.service.getData(dataKey))
    ).subscribe(
        data => {
          this.buildData(data);
        }
    );

this.service.getData()收到错误时,它会立即不断重试。

我试图延迟 interval():

 this.switchMapSubscription = interval(5000).pipe(
        startWith(0),
        switchMap(() => this.service.getData(dataKey)),
        retryWhen(error => error.pipe(delay(5000)))
    ).subscribe(
        data => {
          this.buildData(data);
        }
    );

并且在 subscribe():

 this.switchMapSubscription = interval(5000).pipe(
        startWith(0),
        switchMap(() => this.service.getData(dataKey)),
    ).subscribe(
        data => {
          this.buildData(data);
        },
        err => err.pipe(delay(5000))
    );

我尝试的两个解决方案都得到了与原始代码相同的结果。

当错误出现时,你想延迟,但当错误不出现时,你想退回正确的。

this.switchMapSubcribtion = this.service.getData(dataKey).pipe(
    retryWhen(err => return err.pipe(delay(5000)))
).subscribe(...)