gpt4 book ai didi

angular - 根据先前响应的结果顺序级联 Observables 并重新映射到新数据对象

转载 作者:行者123 更新时间:2023-12-04 02:59:05 25 4
gpt4 key购买 nike

我很难使用 Observables 的强大功能,即 RxJs 6 来正确地 pipe、tap、map、mergemap 或任何我的 HttpClient 请求。具有所有不同功能的版本 hell 使得它不是很容易...

所以我需要的是首先进行 REST 调用,然后根据结果可能进行第二次 REST 调用并将可能接收到的两个数据对象映射到一个新数据对象中。该函数应返回一个 Observable

所以目前,我用一个 subject 解决了它,我可以手动/按顺序执行我需要的操作。该函数返回一个 Subject,在这种情况下不是一个 Observable。但是由于调用者只是订阅了这个函数,所以它起作用了。值得一提的是,下面的两个服务函数(userService.loadUserDetails()adminService.getAdminData())只返回它们从 HttpClient 获得的可观察值.

那么有人可以帮我将下面的示例代码翻译成典型的 RxJs 6 代码吗?

myFunction(): Observable<any> {
const s = new Subject();
let obj: any = {};

this.userService.loadUserDetails().subscribe((userDetails) => {
obj.user = userDetails;
if (userDetails.authorities.includes('ADMIN')) {
this.adminService.getAdminData().subscribe((adminData) => {
obj.adminData = adminData;
s.next(obj);
s.complete();
});
} else {
s.next(obj);
s.complete();
}
});

return s;
}

最佳答案

使用mergeMap链接并有条件地返回

更新:将 mergeMap 更改为 switchMap Incase inner observable 是一个连续的流,当源 observable 发出时它也会取消 inner observable。

    this.userService.loadUserDetails().pipe(
switchMap(user=>
user.authorities.includes('ADMIN')) ?
this.adminService.getAdminData().map(adminData=>({adminData,user})):
Observable.of({user}))
)
.subscribe();

关于angular - 根据先前响应的结果顺序级联 Observables 并重新映射到新数据对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50981109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com