【问题标题】:How to use Observable.Zip with angularfire2?如何将 Observable.Zip 与 angularfire2 一起使用?
【发布时间】:2018-01-25 06:57:09
【问题描述】:

我正在使用 Angular 5 和 angularfire2 来使用 Firebase。 我有一个字符串数组,它们代表 paths 进入 firebase。 我目前正在做的是这样的:

const pathList: string[] = ['path1', 'path2', 'path3'];
const observableList     = [];
pathList.map((location: string[]) => {
    observableList.push(this.db.object(`path_to_something/${location}).valueChanges());
});

const combined = zip(observableList);
combined.subscribe((values: any[]) => {
    console.log('DATA FROM ZIP', values);
}, err => {
    console.log('DATA FROM ZIP ERROR', err);
});

这就是我一直在尝试的,但是 Observables 似乎没有触发。显示控制台上的任何结果。关于这如何工作的任何想法。

我尝试了 forkJoin,但也没有。但我尝试使用 combineList 并且它有效。问题是,我必须使用zip

【问题讨论】:

    标签: angular rxjs angularfire2 rxjs5


    【解决方案1】:

    如果相同的 Rx 链与 combineLatest 一起使用,它也应该与 zip 一起使用。如果它没有发出任何东西,请尝试解开 Observables 数组:

    const combined = zip(...observableList);
    

    你可以用下面的演示试试看,如果你按原样传递数组,它不会发出任何东西:

    http://jsbin.com/davadol/3/edit?js,console

    const a = Observable.of(1);
    const b = Observable.of(2);
    const c = Observable.of(3);
    
    Observable.zip([a, b, c]).subscribe(console.log);
    

    但如果你解开数组,它就可以工作:

    Observable.zip(...[a, b, c]).subscribe(console.log);
    

    说实话,我很惊讶它不适用于数组,因为通过查看我认为应该的类型,请参阅https://github.com/ReactiveX/rxjs/blob/5.5.6/src/operators/zip.ts#L26。 这应该是与 combineLatestforkJoin 相同的用例。令我惊讶的是,我最近发现它也不适用于 Observable.concat

    【讨论】:

      猜你喜欢
      • 2017-05-28
      • 2018-05-23
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 2021-01-02
      • 1970-01-01
      • 2023-03-13
      • 2014-09-25
      相关资源
      最近更新 更多