首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rxjs根据最初的答案返回不同的可观测值。

rxjs根据最初的答案返回不同的可观测值。
EN

Stack Overflow用户
提问于 2017-06-20 22:33:56
回答 1查看 3K关注 0票数 3

我有一个函数,它访问两个可观测值,并返回一个可观测值。

首先,第一个可观测到的订阅。根据它的答案,必须订阅第二个可观测的值(也将一个值从第一个可观测的值传递给它)。但是在任何情况下,都应该从函数返回一个可观察的函数。如果条件确定第二个可观测值必须被查询,那么返回的可观测值当然应该只在第二个可观测值完成后才能完成。在另一种情况下,返回的可观测性在第一个可观测性完成时完成。

到目前为止我已经知道了:

代码语言:javascript
复制
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的回答,我现在想出了如下结论:

代码语言:javascript
复制
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();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-20 22:57:48

您想要flatMap函数http://reactivex.io/documentation/operators/flatmap.html

代码语言:javascript
复制
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的一个很好的资源

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44664049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档