document.hasFocus()返回true后,每隔3秒重试5次



Angular 11:我有一个要求,我的移动网站将把用户带到另一个应用程序的弹出窗口。一旦用户回到我的移动网站,我必须做一个HTTP GET调用。如果response.await===true或者error3秒之后我必须再试一次,重复这个过程,麦克斯尝试是5。如果整个过程(即当用户回到我的移动网站时)是>20sec,我必须中止操作并抛出错误。

initiateProcess(){
let index = 1;
let tries=4;
return of(1).pipe(
switchMap(()=>this.httpService.getFromApi(SOME_API)),
retryWhen(error=>error.pipe(delay(3000),take(tries),mergeMap(error => {
if (++index > tries) {
return throwError('time out');
}
return of(error);
}))),
);
}

这是我到目前为止所做的。但是我被卡住了。

你可以把其他失败条件变成一个错误,其余应该遵循?

interface ResponseType {
await: boolean
}
initiateProcess(): Observable<ResponseType> {
let tries=4;
const timeout$ = timer(20 * 1000).pipe(
tap(_ => {throw "Error: 20 Seconds have passed without Api response";})
);
const api$ = defer(
() => this.httpService.getFromApi(SOME_API)
).pipe(
tap((res: ResponseType) => {
if (res.await) throw "Error: Api response.await === true";
}),
retryWhen(error$ => error$.pipe(
take(tries),
delay(3000)
))
);
return merge(api$, timeout$);
}

最新更新