我需要做两次休息。休息呼叫2取决于休息呼叫1.我想在继续之前将每个结果存储在服务中。然后我想将一个observable返回给调用rest call 1的组件,以便组件可以在出现问题时进行订阅。
来自服务的代码:
login(username: string, password: string): Observable<AuthAccess> {
// rest call 1
return this.getAuthClient()
.flatMap(res => {
this.client = res.body;
// rest call 2
return this.authenticate(username, password)
.flatMap(access => {
this.userAccess = access.body;
return Observable.of(this.userAccess);
});
});
}
我可以正确链接,但是调用它并订阅该调用的组件将显示未定义的响应。任何有关这方面的帮助将不胜感激,因为我无法找到关于这个确切用例的回复。
答案 0 :(得分:2)
Live working example。
使用map
运算符(和lettable operatos sintax),而不是链接一个新的flatMap
。
login(username: string, password: string): Observable<any> {
// rest call 1
return this.getAuthClient()
.pipe(flatMap(res => {
this.client = res.body;
// rest call 2
return this.authenticate(username, password)
.pipe(map(access => {
this.userAccess = access.body;
return this.userAccess;
}));
}));
}
答案 1 :(得分:0)
尝试将第一个observable转换为promise
login(username: string, password: string): Observable<AuthAccess> {
// rest call 1
return this.getAuthClient()
.flatMap(res => {
this.client = res.body;
}).toPromise()
.then(function(){
// rest call 2
return this.authenticate(username, password)
.flatMap(access => {
this.userAccess = access.body;
return Observable.of(this.userAccess);
});
});
}