我试图调用两个可观察对象,从第二个响应开始,我操纵第一个,然后返回一个新的可观察对象。
double
isFirstTimeUser(response.id)是另一个返回可观察值的函数。
class MyPoint implements Clusterable<MyPoint>
我要做的就是从第一个http调用中获取用户对象,在第二个调用中使用用户的return this.http.get(requestUrl)
.map((response: User) => {
sessionManager.currentUser = response;
return this.isFirstTimeUser(response.id);
})
.do((response: any) => {
console.log(response);
sessionManager.currentUser.firstTimeLogin = response === 'true';
return Observable.create(sessionManager.currentUser);
})
.toPromise();
发出另一个请求,然后在从第二个可观察到的响应中获取响应后,我更新了属性的第一个响应,并返回更新后的第一个响应。我该如何实现?我应该看什么rxjs函数?
答案 0 :(得分:0)
使用mergeMap
return this.http.get(requestUrl)
.mergeMap((response: User) => {
const currentUser = response;
currentUser.firstTimeLogin = this.isFirstTimeUser(response.id) === 'true'
return Observable.of(currentUser);
})
答案 1 :(得分:0)
在您的示例中您很亲密。
您要使用{em>取消订阅到传入的可观察对象的switchMap
,并订阅到下一个可观察对象。
return this.http.get(requestUrl)
.switchMap((response: User) => {
sessionManager.currentUser = response;
return this.isFirstTimeUser(response.id);
})
.map((response: any) => {
console.log(response);
sessionManager.currentUser.firstTimeLogin = response === 'true';
return sessionManager.currentUser;
})
.toPromise();
响应将传递到isFirstTimeuser()
,并将以下.map()
应用于该函数返回的可观察对象。
之所以称为switchMap
,是因为this.http.get()
返回的可观察对象是未订阅的,并且使用了下一个可观察对象。 this.http.get()
不会有问题,但是请记住,switchMap
仅适用于 first 发出的值。