无法订阅CombineLatest的结果

时间:2018-06-21 20:43:36

标签: firebase rxjs observable angularfire2

当我更新到RxJS 6时,我的应用程序坏了。我可以正常使用它,但是这种方法让我很困惑。

以前,我们有一系列可观察的对象被flatMapped,然后像这样使用CombineLatest:

const newObservable = myArrayOfObservables
   .flatMap(observables => {
       return Observable.combineLatest(observables);
   });

我可以订阅newObservable并从其他所有对象中获取最新输出。

现在我正在尝试执行以下操作:

const mergedList$ = chatList$.pipe(
  mergeMap(res => {
    return combineLatest(res);
  }));

这使我成为那些真正漫长而费解的人之一

  

类型'(res:Observable <{$ key:string;}> [])=> OperatorFunction <{},[{},Observable <{$ key:string; }>]>'不能分配给类型'(value:Observable <{$ key:string;}> [],index:number)=> ObservableInput <{}>'的参数。     键入'OperatorFunction <{},[{},Observable <{$ key:string; }>]>'不能分配给类型'ObservableInput <{}>'。       键入'OperatorFunction <{},[{},Observable <{$ key:string; }>]>”不能分配给“ Iterable <{}>”类型。         类型'OperatorFunction <{},[{},Observable <{$ key:string;类型中缺少属性'[Symbol.iterator]'。 }>]>'。

坦白地说,我的阅读障碍使我无法解析。

如果我只返回上面的res,然后尝试

const mergeCombo = combineLatest(mergedList$);

现在mergeCombo不是可观察的。而是一个

  

OperatorFunction <{},[{},Observable <{           $ key:字符串;       }>]>

值得注意的是,我原来的可观察对象是由AngularFireObject.snapshotChanges()发出的

1 个答案:

答案 0 :(得分:7)

您没有显示如何导入combineLatest。看起来好像您正在将其导入为运算符一样,已经过时了。

确保以这种方式导入它:

import {combineLatest} from "rxjs";

然后您的原始代码应该可以正常工作:

const mergedList$ = chatList$.pipe(
  mergeMap(res => combineLatest(res))
);