【发布时间】:2019-07-26 19:31:41
【问题描述】:
我们在 Angular 中发出一个 http 请求,该请求返回一些包含布尔值的数据,该布尔值指示数据是否已被完全处理。我们希望从第一个 http 响应中发出不完整的数据,并继续发出 http 请求,直到处理为真。如果第一个响应返回已处理的 true,我们还希望避免重复 http 请求。我们正在使用 retryBackoff 库,如果我理解正确的话,它只是 retryWhen 并带有延迟。
这是我们正在处理的代码示例:
const crashDetails$ = combineLatest(crashId$, database$)
.pipe(switchMap(([crashId, database]) => {
return this._crashDetailsService.getCrashDetails({crashId, database});
});
const crashDetailsWithRetry$ = crashDetails$
.pipe(
tap(crashDetails => {
if (!crashDetails.processed) {
throw new Error('Still processing, retry if able');
}
}),
retryBackoff(retryOptions)
);
return merge($crashDetails, crashDetailsWithRetry$);
问题是在处理为 true 的情况下会发出 2 个请求。
我尝试将 share() 和 shareReplay(1) 添加到 crashDetails$,但这会导致 crashDetailsWithRetry$ 停止工作。有没有一种简单的方法来实现我们想要的,或者我应该创建一个新的主题和自定义重试逻辑来处理这种情况?
谢谢!
【问题讨论】:
标签: javascript angular typescript rxjs