合并可观察变量没有获得第二个可观察变量的值

时间:2020-05-06 17:29:03

标签: angular merge observable rxjs6

我对此代码有一点问题:

import { Injectable } from '@angular/core';
import { BehaviorSubject, Subject, merge } from 'rxjs';
import { scan, map } from 'rxjs/operators';
import { boatsList } from 'src/app/shared/mocks/boats.mock';
import { CatamaranModel } from 'src/app/shared/models/catamaran.model';
import { SailBoatModel } from 'src/app/shared/models/sail-boat.model';

@Injectable({
  providedIn: 'root'
})

export class BoatListService {

  private boatListInitSubject: BehaviorSubject<(CatamaranModel|SailBoatModel)[]> = new BehaviorSubject(boatsList);
  boatListInit$ = this.boatListInitSubject.asObservable();

  private addedBoatSubject: Subject<(CatamaranModel|SailBoatModel)> = new Subject();
  addedBoat$ = this.addedBoatSubject.asObservable();

  boatList$ = merge(
    this.boatListInit$,
    this.addedBoat$
  )
    .pipe(
      scan((acc: (CatamaranModel|SailBoatModel)[], value: CatamaranModel|SailBoatModel) => [...acc, value])
    );

  constructor() {
  }

  addBoat(boat: CatamaranModel | SailBoatModel){
    this.addedBoatSubject.next(boat);
  }
}

问题出在我的合并中

 boatList$ = merge(
    this.boatListInit$,
    this.addedBoat$
  )
    .pipe(
      scan((acc: (CatamaranModel|SailBoatModel)[], value: CatamaranModel|SailBoatModel) => [...acc, value])
    );

我使用此合并为收藏夹添加了一个新对象,但addedBoat $中的对象从未添加到列表中,我也不知道为什么。 当我做地图而不是扫描时,我找不到this.addedBoat $的结果。

如果我订阅this.addedBoat $并启动addBoat函数,那么我有一个不错的对象。

我是否滥用合并?

2 个答案:

答案 0 :(得分:0)

尝试更改此行

私人添加的BoatSubject:主题<(CatamaranModel | SailBoatModel)> =新的Subject();

私人添加的BoatSubject:BehaviourSubject <(CatamaranModel | SailBoatModel)> = new BehaviourSubject(您的期望值);

答案 1 :(得分:-1)

在这种情况下,您应该使用CombineLatest .....相应地更改您的通话:

import { combineLatest} from 'rxjs';

boatList$ = combineLatest(
    this.boatListInit$,
    this.addedBoat$
  )
    .pipe(
      scan((acc: (CatamaranModel|SailBoatModel)[], value: CatamaranModel|SailBoatModel) => [...acc, value])
    );