我正在尝试一个接一个地调用几个可观察对象。这是我的代码:
// service1
login(username: string, password: string): any {
this.service2.firstObservable(username, password)
.pipe(map(
data => {
if (data) {
return this.service2.secondObservable(data, username, password)
.subscribe(token => {
return true;
});
}
},
error => {
this.service.error(error);
return false;
}
));
}
执行:
this.service1.login(this.f.username.value, this.f.password.value)
.pipe(map(
data => {
// Login is successful
}
));
我得到:
Cannot read property 'pipe' of undefined
显然,service1.login返回错误的值。可以使某些东西起作用吗?
谢谢
更新1。
login(username: string, password: string): any {
return this.service1.firstObservable(username, password)
.pipe(switchMap(
data => this.service1.secondObservable(data, username, password)
));
}
答案 0 :(得分:1)
您可以尝试使用switchMap切换可观察对象,并记住在service1中返回值:
Error in value [[3L]](cond) : unused argument (cond)
之后,第二段代码应该工作。
答案 1 :(得分:0)
您可以使用flatMap来连接顺序请求:
login(username: string, password: string): Observable<boolean> {
this.service2.firstObservable(username, password)
.pipe(flatMap(
(data) => {
if (data) {
return this.service2.secondObservable(data, username, password).pipe(flatMap((token) => {return true;}))
}
},
error => {
this.service.error(error);
return false;
}
));
}
答案 2 :(得分:0)
您可以使用await
,但是方法必须为void
和asnyc
async login(username: string, password: string) {
let data = await this.service2.firstObservable(username, password).toPromise();
if(data){
let data2: boolean = await this.service2.secondObservable(data, username, password).toPromise();
}
}