我有一个函数,它访问两个可观测值,并返回一个可观测值。
首先,第一个可观测到的订阅。根据它的答案,必须订阅第二个可观测的值(也将一个值从第一个可观测的值传递给它)。但是在任何情况下,都应该从函数返回一个可观察的函数。如果条件确定第二个可观测值必须被查询,那么返回的可观测值当然应该只在第二个可观测值完成后才能完成。在另一种情况下,返回的可观测性在第一个可观测性完成时完成。
到目前为止我已经知道了:
private load(): Observable<boolean> {
return this.accessControl.map((res: any) => {
if (res.accessGranted) {
this.dataService.getData(res.id).subscribe((v: number) => {
this.value = v;
}, () => {
this.value = null;
this.showErrorMessage();
});
} else {
this.value = null;
}
return true;
})
.first();
}返回的可观测值是第一个映射版本。但是,到目前为止,我还没有等待第二个可观察到的结果,并在if子句计算为true时返回它的映射版本。
更新
基于LLai的回答,我现在想出了如下结论:
private load(): Observable<boolean> {
return this.accessControl.flatMap((res: any) => {
if (res.accessGranted) {
return this.dataService.getData(res.id)
.catch((err) => {
this.value = null;
this.showErrorMessage();
return Observable.throw(err);
})
.map((v: number) => {
this.value = v;
return true;
});
} else {
this.value = null;
return Observable.of(null);
}
})
.first();
}发布于 2017-06-20 22:57:48
您想要flatMap函数http://reactivex.io/documentation/operators/flatmap.html
private load(): Observable<boolean> {
return this.accessControl.flatMap((res: any) => {
if (res.accessGranted) {
return this.dataService.getData(res.id);
} else {
return Observable.of(null);
}
})然后订阅这个可观察的序列。这将链接api调用。下面是flatMap https://coryrylan.com/blog/angular-multiple-http-requests-with-rxjs的一个很好的资源
https://stackoverflow.com/questions/44664049
复制相似问题