首页 > 解决方案 > 重试机制实际上并未触发 HTTP 调用

问题描述

我有以下代码:

    const http$: Observable<Course[]> = this.http.request('/api/courses');

    const courses$ = http$
        .pipe(
            tap(() => console.log('HTTP request invoked ...')),
            map( res => res['payload'] ),
            shareReplay(),
            retryWhen(errors =>
                errors.pipe(
                    tap(() => console.log('Error retry invoked ...')),
                    delayWhen(() => timer(2000)
                )
            )),
            retry(4)
        );

现在,当发生网络故障时,我检查了控制台并发现消息“错误重试调用...”,但是当我检查网络选项卡时,我找不到再次调用的实际 HTTP 请求。

这背后有什么原因吗?

谢谢

标签: angularrxjsobservable

解决方案


当您使用时,retryWhen您不必添加retry(4),也删除shareReplay()您应该能够看到它重试。

const courses$ = http$
    .pipe(
        tap(() => console.log('HTTP request invoked ...')),
        map( res => res['payload'] ),
        retryWhen(errors =>
            errors.pipe(
                tap(() => console.log('Error retry invoked ...')),
                delayWhen(() => timer(2000)
            )
        )),
    );

推荐阅读