Javascript RxJS groupBy未在订阅上获取值

Javascript RxJS groupBy未在订阅上获取值,javascript,angular,typescript,rxjs,Javascript,Angular,Typescript,Rxjs,我在MongoDB实例中有一个很长的列表,其中包含具有以下属性的股票价格: 时间戳 象征 价格 我想按符号对它们进行分组。我使用observable获取股票价格列表,并将其注入组件中,即: import {Component, OnInit} from '@angular/core'; import {ActivatedRoute} from '@angular/router'; import {StockPrice} from '../../model'; import {flatMap, g

我在MongoDB实例中有一个很长的列表,其中包含具有以下属性的股票价格:

时间戳 象征 价格 我想按符号对它们进行分组。我使用observable获取股票价格列表,并将其注入组件中,即:

import {Component, OnInit} from '@angular/core';
import {ActivatedRoute} from '@angular/router';
import {StockPrice} from '../../model';
import {flatMap, groupBy, mergeMap, toArray} from 'rxjs/operators';
import {of, zip} from 'rxjs';

@Component({
    selector: 'compare-chart',
    templateUrl: './compare-chart.component.html',
    styleUrls: ['./compare-chart.component.scss']
})
export class CompareChartComponent implements OnInit {

    constructor(private route: ActivatedRoute) {
    }

    ngOnInit() {
        this.route.data.pipe(
            flatMap((data: { stockPrices: StockPrice[] }) => data.stockPrices),
            groupBy(stockPrice => stockPrice.symbol),
            mergeMap(group => zip(of(group.key), group.pipe(toArray())))
        ).subscribe(console.log);
    }

}
由于某些原因,控制台中没有发出和显示任何值,但是我确实看到股票价格列表是从服务器检索的。 我尝试了和的所有提示


有什么想法吗?

flatMap希望返回一个可观察对象,似乎您想要的是这样做:

flatMap((data: { stockPrices: StockPrice[] }) => from(data.stockPrices)),
from将把一个数组变成一个可观察的流,flatMap可以对其进行操作,这样groupBy就可以完成它的任务

值得注意的是,这并不是绝对必要的,您可以使用map操作符和来自lodash或soemthing的同步groupBy工具

groupBy是一种复杂的操作员,只有当你想对一个实际的数据流进行分组时才需要它,就像你有一个来自web套接字或轮询器之类的实时股价流。

from添加也不起作用,它仍然不会记录任何东西。我想使用RxJS groupBy,因为我非常喜欢函数方法和将操作符链接在一起。您还需要在flatMap之前添加第一个操作符,或者将其全部包装在switchMap或soemthing中,因为数据是不完整的可观察数据,所以toArray永远不会发出任何东西,因为它正在等待上游完成。。。然而,在这种方法中,将map操作符与同步groupBy函数一起使用同样有效。这只是复杂性的缘故。函数方法意味着输入的相同参数总是产生相同的结果,这并不意味着使用链式rxjs运算符。