javascript - RxJS groupBy 未获取订阅值

标签 javascript angular typescript rxjs

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

  • 时间戳
  • 符号
  • 价格

我想按符号对它们进行分组。我使用可观察来获取 StockPrices 列表并将它们注入(inject)到组件中,如下所示:

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);
    }

}

由于某种原因,控制台中没有发出和显示任何值,但我确实看到 StockPrices 列表是从服务器检索的。 我尝试了 rxjs.dev 中的所有提示和 learnrxjs.io .

有什么想法吗?

最佳答案

flatMap 期望返回一个可观察值,看来您想要的是这样做:

flatMap((data: { stockPrices: StockPrice[] }) => from(data.stockPrices)),

from 会将数组转换为可观察的流,flatMap 可以对其进行操作,以便 groupBy 可以完成它的工作。

值得注意的是,这并不是严格必要的,您可以只使用 Map 运算符和来自 lodash 或 soemthing 的同步 groupBy 工具。

groupBy 是一种复杂的运算符,只有当您想要对实际流进行分组时才需要它,例如您有来自网络套接字或轮询器等的实时股票价格流。

关于javascript - RxJS groupBy 未获取订阅值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56996775/

相关文章:

javascript - 允许滚动的简单全屏透明div

Angular 2 *ngIf 不更新 HTML 模板

angular - 失败 : Template parse errors: Angular 2

javascript - CSS/JavaScript 溢出 Chrome 错误?

javascript - 带有选择/取消选择和汇总选项的表格

javascript - 跨浏览器 JavaScript 粘贴

Angular2 MdDialog 不显示内容,只显示窗口

Angular 2路由根据参数类型加载不同的组件

angular - 为 Angular 4 中的所有组件注入(inject)服务作为单例

angular - 如何在 Angular 组件的单元测试中提供 ControlContainer?