RXJS:返回外部可观察值的操纵值

时间:2018-09-12 22:52:14

标签: angular typescript rxjs httpclient

我试图调用两个可观察对象,从第二个响应开始,我操纵第一个,然后返回一个新的可观察对象。

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函数?

2 个答案:

答案 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 发出的值。