我已经实现了角度setinterval方法,用于每2秒触发一次http服务(getDeviceMobileNumber)。但是我只想在状态码为400时再次触发(最多3次)HTTP服务。
但是当前的实现(setinterval)没有等待响应并调用服务3次。
有什么解决方案可以在收到响应后进行HTTP服务调用?
this.counter= 0;
public getMobileNumberCall() {
this.timer = setInterval(() => {
this.counter++;
if (this.counter === 4) {
clearInterval(this.timer);
} else {
this.commonServices.getDeviceMobileNumber().then((data: any) => {
clearInterval(this.timer);
}).catch((err: any) => {
//400 error
})
}
}, 2000);
}
答案 0 :(得分:2)
在http.get管道中使用retryWhen。
function http_retry(maxRetry: number = 3, delayMs: number = 2000) {
return (src: Observable) => src.pipe(
retryWhen(_ => {
return interval(delayMs).pipe(
flatMap(count => count == maxRetry ? throwError("Giving up") : of(count))
)
})
)
}
this.http.get("/api")
.pipe(http_retry())
.subscribe(result => console.log(result))