Angular 2:在路线解析器中链接RxJS Observable

时间:2016-11-05 18:05:38

标签: angular observable

我试图从解析器中的一系列可观察数据中获取所有数据。我首先需要进行http调用以获取所有类型并返回一个数组,我需要循环遍历类型数组并获取每种类型的所有数据。最后,我想一次返回一个数组或每种类型的所有数据(在导航到路线之前)。

getAllTypesDataResolverFunction() {
        this.getAllTypes()
            .flatMap(data => {
                let allTypesData = [];

                data.forEach(i => {
                    if(i.type === 4) {
                        allTypesData.push({'typeObj': i});
                        return Observable.forkJoin([this.getDataForType(), this.getMoreDataForType()])
                          .subscribe(data => {
                                let arrayLength = allTypesData.length-1;
                                allTypesData[arrayLength].typeObjData = data;
                          })

                    }
                })
                return allTypesData;
            }).subscribe(data => {
                return data;
            })
}

使用我现在拥有的代码,解析器似乎不完整(或者至少不完整嵌套的observable,因此,为该observable返回的数据在组件中是未定义的。任何人都可以提出解决此问题的方法问题?谢谢!

1 个答案:

答案 0 :(得分:0)

您可以查看this great blog article,尤其是名为

的部分中的示例
  

串联和并行组合Observable

这似乎达到了你想要做的。

在您的情况下,您可以在映射数据之前考虑Array.filter函数,因为您似乎只对类型4的数据感兴趣(并且可能使用枚举而不是幻数)。