我遇到了一个问题,我一直在尝试使用 找到解决方案RxJs
,但似乎找不到适合它的解决方案...
- 我有 3 个不同的 REST 请求,它们将按顺序调用,每个请求都需要前一个的响应作为参数
- 我想实现一个进度条,随着请求成功而增加
这是我的想法:
- 我将使用管道并
concatMap()
避免嵌套订阅,并在前一个请求完成后订阅每个请求。
考虑这个非常简化的版本。假设每个都of
代表一个完整的 REST 成功请求(稍后将处理错误),并且我将使用n
参数做未显示的工作......
const request1 = of('success 1').pipe(
delay(500),
tap(n => console.log('received ' + n)),
);
const request2 = (n) => of('success 2').pipe(
delay(1000),
tap(n => console.log('received ' + n))
);
const request3 = (n) => of('success 3').pipe(
delay(400),
tap(n => console.log('received ' + n))
);
request1.pipe(
concatMap(n => request2(n).pipe(
concatMap(n => request3(n))
))
)
但是,当我订阅最后一段代码时,我只会得到最后一个请求的响应,这是预期的,因为管道会解决这个问题。
因此concatMap()
,我可以正确链接我的依赖 REST 调用,但无法跟踪进度。
虽然我可以通过嵌套订阅很容易地跟踪进度,但我正在努力避免这种情况并使用最佳实践方式。
我怎样才能链接我的依赖 REST 调用,但每次调用成功时仍然能够做一些事情?