首页 > 解决方案 > 无法在 combineLatest 上进行管道传输

问题描述

我正在尝试遵循此示例,但在使用时遇到了问题combineLatest()

Property 'subscribe' does not exist on type 'OperatorFunction<unknown, [unknown, Item[], User[]]>'

这是我的门面:

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { combineLatest, distinctUntilChanged, map } from 'rxjs/operators';

export interface User {
  test: string;
}

export interface Item {
  test: string;
}

interface State {
  items: Item[];
  users: User[];
}

let _state: State = {
  items: [],
  users: [],
};

@Injectable()
export class Facade {
  private store = new BehaviorSubject<State>(_state);
  private state$ = this.store.asObservable();

  items$ = this.state$.pipe(map(state => state.items), distinctUntilChanged());
  emails$ = this.state$.pipe(map(state => state.users), distinctUntilChanged());

  constructor(private http: HttpClient) {
    combineLatest(this.items$, this.emails$).subscribe(
      ([items, users]) => {}
    );
  }
}

items$并且emails$都是 Observables。此代码几乎反映了上面示例中的代码,为什么会出现此错误?

标签: angularrxjs

解决方案


假设您使用的是 RxJS 6+ 版本,根据迁移文档

  1. combineLatestfromrxjs/operators已被弃用。您现在应该直接导入该方法:

    import { combineLatest } from 'rxjs';
    
  2. 新版本的combineLatest()接受一个数组Observables作为它的参数:

    combineLatest([this.items$, this.emails$]).subscribe(([items, emails]) => {});
    

推荐阅读