为 rxjs 重构 combinelatest

refactoring combinelatest for rxjs

我正在尝试将我的代码从 rxjs 5.x 重构为 rxjs 6 和 Angular 6。我有一个本质上触发搜索的代码:

  startAt = new Subject();
  endAt = new Subject();

  startobs = this.startAt.asObservable();
  endobs = this.endAt.asObservable();

  constructor() {}

  ngOnInit(){

    var that = this;

    Observable.combineLatest(this.startobs, this.endobs)
    .subscribe((value) => {
      this.acctServ.searchAccounts(value[0], value[1])
      .subscribe((accounts) => {
console.log("accounts : ", accounts);
          });


      })


    });
  }

为了重构这个,我做了以下事情:

startAt = new Subject();
  endAt = new Subject();

  startobs = this.startAt.asObservable();
  endobs = this.endAt.asObservable();

  constructor() { 

  }//End of Constructor

  ngOnInit() {

    Observable.create().pipe(combineLatest(this.startobs, this.endobs))
    .subscribe((value) => {
      console.log("Search Box Obersable : ", value);

      this.acctServ.searchAccounts(value[0], value[1])
      .subscribe((accounts) => {

        console.log("accounts : ", accounts);
          });


      })


    });

  }//End of ngOnInit

但是,这似乎没有帮助,并且不再触发搜索。我想知道如何实际重构此代码以使用 rxjs 6?

您正在使用从 "rxjs/operators" 导入的 combineLatest 运算符,而您应该使用从 "rxjs":

导入的 combineLatest 创建方法

你现在的Observable.create().pipe(combineLatest(this.startobs, this.endobs))和下面的一样:

import { combineLatest } from 'rxjs';

combineLatest(Observable.create(), this.startobs, this.endobs)
  ...

这将永远不会发射任何东西,因为 combineLatest 要求所有源 Observables 至少发射一个值。但是 Observable.create() 本身不会发出任何东西,所以 combineLatest 也不会发出任何东西。

相反,您应该只使用以下内容:

import { combineLatest } from 'rxjs';

combineLatest(this.startobs, this.endobs)
  ...