使用mergeMap时,mat-table不会呈现Observable <any []>

时间:2018-09-28 00:13:10

标签: angular angular-material observable rxjs6

在stackBlitz上发布了一个很好的示例:-)

https://stackblitz.com/edit/angular-f351cx

我在将Firebase中的两个数据库查询合并为一个可观察的,很好地渲染到我的mat-table的麻烦中。

我走的很远。通过返回可观察值,我可以在表中显示一个数据库查询,但是一旦我尝试连接第二个数据库,表中什么也没有显示。

我觉得这很奇怪,因为当我异步/ JSON传递第二个Observable的结果时,结果似乎具有正确的格式。

我在做什么错?我的示例使用http.get()和restcountries.eu,但实际上我正在尝试使其与Firebase一起使用。在我自己的应用程序和本例中,错误/行为都是相同的。

1 个答案:

答案 0 :(得分:1)

就像您在调用return of(myArray)时所观察到的那样,才从第二个http请求中获取值。

如果将.pipe(delay(100));添加到其中,则会显示表中的值。

代码将为:

this.singleObsDataSource = this.http.get('https://restcountries.eu/rest/v2/regionalbloc/efta')
this.doubleObsDataSource = this.singleObsDataSource.pipe(mergeMap((data: any[]) => {
  let myArray = [];
  data.forEach(country => {
    let url = 'https://restcountries.eu/rest/v2/name/' + country['name'];
    this.http.get(url).subscribe(countryInfo=>{
      myArray.push(countryInfo[0]);
    })
  })
  return of(myArray).pipe(delay(100));
}))

Working stackblitz