如何解决如何使用RxJ在paralell中通过多个可取消的请求调用后端?
在我的Angular应用程序中,有一个可观察的对象,它根据用户单击网格中的一行来发出一个ID。 每次单击新行时,我都想使用ID调用后端以获取数据。但是,如果用户单击之前的另一行 后端调用完成后,我想取消第一个请求,而是获取新选择的行的数据。
我希望请求可以并行运行,所以使用CombineLatest并非可行,对吧?
我在考虑这样的事情,但是switchMap期望并返回值...。
# A tibble: 12 x 4
# Groups: Speaker [3]
Speaker cond mean_rt overall_rt
<fct> <fct> <dbl> <dbl>
1 EN ExpA 1690. 8449.
2 EN ExpB 1625. 8127.
3 EN ExpC 1588. 7940.
4 EN ExpD 1475. 7375.
5 FR ExpA 1321. 6603.
6 FR ExpB 1584. 7922.
7 FR ExpC 1493. 7465.
8 FR ExpD 1463. 7315.
9 KR ExpA 1393. 6965.
10 KR ExpB 1540. 7702.
11 KR ExpC 1569. 7847.
12 KR ExpD 1570. 7849.
在我的网页上,我还有另外两个组件正在分别监听subject1和subject2中的流。并且不需要同步,而是在网格中显示所选行的数据。
有什么好的模式或做法可以建议吗?
解决方法
您可以通过返回两个可观察对象的merge
(或forkJoin
)而无需订阅它们,并使用tap
更新主题,如以下示例所示:
changedSubject$
.pipe(
switchMap(id => {
return merge(
callApiMethod1(id).pipe(tap(result1 => subject1$.next(result1))),callApiMethod2(id).pipe(tap(result2 => subject2$.next(result2)))
);
})
)
.subscribe();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。