我想每 3 秒查询一次服务器,直到收到正返回或 15 秒过去。这是我的代码,但它不起作用:
service.ts
getStatus(id: number): Observable<Status> {
return
from(this.webSvc.getStatus(id))
.pipe(
throttleTime(3000),
mergeMap((result: Status) => {
if (result.IsProcessed) {
return of(result);
}
return throwError(null);
}),
retry(5) // I assume, that 5 retries * 3sec throttle time = 15 seconds
);
}
Controller .ts
service.getStatus(item.id)
.subscribe(
(status: Status) => {
// some logic
},
error => {
// error logic
}
);
最佳答案
我会执行以下操作:
defer(() => yourRequest()).pipe(
retryWhen(obs$ => obs$.pipe(delay(3000))),
timeout(15000)
);
这是一个现场演示:https://stackblitz.com/edit/rxjs-ssanxj?file=index.ts
解释一下发生了什么:
- 它会立即发出请求并等待答案或错误
- 如果出现错误,它将等待 3 秒,然后重试请求
- 如果事情持续失败,15 秒后超时将引发错误
- 一旦一切顺利,我们就会收到回复并停止投票
关于typescript - RxJS - 每 3 秒查询一次服务器,持续 15 秒或正结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60037364/