如何订阅从 ngrx 的实体数据服务返回的 Observable

how to subscribe to an Observable returned from ngrx's Entity Data Service

我有一个从 EntityCollectionServiceBase 派生的名为 TransactionEntityService 的服务,用于一个名为 Transaction 的模型。

export class TransactionEntityService
extends EntityCollectionServiceBase<Transaction> {

我正在使用 TransactionDataService 覆盖 DefaultDataService 的默认行为。 在 AppModule 中,TransactionDataService 是这样注册的

    export class AppModule {
  constructor(
    private eds: EntityDefinitionService,
    private entityDataService: EntityDataService,
    private transactionsDataService: TransactionsDataService
  ) {
    eds.registerMetadataMap(entityMetadata);

    entityDataService.registerService('Transaction', transactionsDataService);
  }
}

并且 TransactionsDataService 会覆盖 getAll,如下所示。

    export class TransactionsDataService extends DefaultDataService<Transaction> {
  constructor(
    http: HttpClient,
    httpUrlGenerator: HttpUrlGenerator,
    private notifyService: NotificationService
  ) {
    super('Transaction', http, httpUrlGenerator);
  }
  getAll(): Observable<Transaction[]> {
    return this.http
      .get<ApiResponse>('https://localhost:xxxx/transaction/GetLastSixMonth')
      .pipe(
        tap((data) => {
          this.notifyService.showSuccess(data.message, 'Sucess');
        }),
        map((res) => res.result),
        catchError((err) => {
          this.notifyService.showError(
            'Error While Six Month Transactions',
            'Error'
          );
          return of();
        })
      );
  }

实体服务的“$entitie”属性 在调用 api 后返回正确的结果。我正在过滤该结果以计算名为 last6MonthDepositCount$ 的可观察对象中的某些内容。

  this.last6MonthDepositCount$ = this.transactionsEntityService.entities$.pipe(
  map((transactions) => {
    const res = transactions.filter(
      (transaction) =>
        transaction.transactionType === TransactionType.Deposit
    ).length;
    return res;
  })//,
 // tap((val) => this.depositCount = val)
);

在 html 我可以使用这个 observable

{{ last6MonthDepositCount$  | async }}

有效。

我应该怎么做才能在我的代码中的另一个变量中使用这个 observable 的值?

this.last6MonthDepositCount$.subscribe(x => this.dipositCount = x);

这种代码无效。我在 dipositCount 中得到 0,它看起来像可观察对象的初始值。

此处反应式范式命令式[​​=27=]发生冲突。

myChart.data.datasets[0].datathis.last6MonthDepositCount$.subscribe(x => this.dipositCount = x); 给出最终值之前被调用。

您需要做的是:- 在 ngAfterViewInit 中使用 initial/default 值初始化 chartJs,并在 this.last6MonthDepositCount$.subscribe() 方法中更新 myChartData

如果您想同时获得 2 个可观察量的结果,请使用 combineLatest

const timerObservable1 = timer(0, 1000); 
    const timerObservable2 = timer(500, 1000); 
    const combinedTimers = combineLatest(timerObservable1, timerObservable2);
    combinedTimers.subscribe((value1, value2) => //DO something with both values together to update Chart);