处理rxjs observables逻辑

时间:2016-11-14 13:47:49

标签: angular typescript rxjs

我有以下代码:

Observable.combineLatest(
    this.data.getPersonalData(myfilter),
    this.peopleService.selectedPerson,
).subscribe(([data, person]) => {
    this._data = data;
    if (this._data.length) {
        this.infoService.getInfo(
            person.id
        )
        .subscribe(res => {
            this.handleInfo(res);
        });
    }
});

Observable.combineLatest(
    this.data.getPersonalData(myfilter),
    this.sectionService.selectedSection
).subscribe(([data, section]) => {
    this.filterbySection(s);
});

我将尝试解释这个场景:

首先,我们获得myfilter给出的所有个人数据。 Okey,现在,给定selectedPerson我们获取一个人的所有信息,handleInfo将此信息与data中的一组对象相关联。但事情是,当它结束时我想filterbySection selectedSection

我知道我可以将this.sectionService.selectedSection放在第一个combineLatest中,但每次用户更改该部分时,它都会运行infoService进入数据库并带来所有信息,我不需要这种行为。当我选择一个人时,我需要运行getInfo,处理此信息将其映射到_data,然后在每次用户点击新内容时按部分过滤所有内容“info + data”部分。

1 个答案:

答案 0 :(得分:0)

我不确定这个解决方案。但我可以为EventEmitter创建一个info,然后我就可以订阅personalInfo,而在第二个combineLastest中我会有类似的内容:

Observable.combineLatest(
    this.infoService.selectedInfo,
    this.sectionService.selectedSection
).subscribe(([info, section]) => {this.filterBySection(info, section)});