rxjs中retryWhen的用法

开发中出现的一个场景,当token过期时需要更新token进行重试,刚好看到rxjsretryWhen,还是满足这个场景。

可以基于所有请求添加retryWhen,当该请求错误原因是token过期引起时进行重试即可。

retryWhen要求传入一个Observable<T> => Observable<T> 函数,返回的Observable决定了是否进行重试,如果执行observer.error则会终止重试,负责则会进行重试。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 通讯异常重试
retryWhen(errors =>
Observable.create(observer => {
errors.pipe(catchError(observer.error)).subscribe(error =>
if (需要重试) {
执行异步操作,更新TOKEN进行重试
observer.complete()
} else {
// 恢复异常状态
observer.error(error)
}
})
})
)

这样就可以很友好的进行通讯重试,去更新过期的token了。