如何在 angularfire2 中使用 Observable.Zip?

Ger*_*uiz 2 rxjs rxjs5 angularfire2 angular

我正在使用 Angular 5 和 angularfire2 来处理 Firebase。我有一个字符串数组,它们表示进入 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);
});
Run Code Online (Sandbox Code Playgroud)

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

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

mar*_*tin 5

如果使用相同的 Rx 链,combineLatest它也应该可以使用zip。如果它不发出任何东西,请尝试解开 Observable 数组:

const combined = zip(...observableList);
Run Code Online (Sandbox Code Playgroud)

您可以使用以下演示进行尝试,看看如果按原样传递数组,它不会发出任何内容:

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);
Run Code Online (Sandbox Code Playgroud)

但是,如果您解开数组,它会起作用:

Observable.zip(...[a, b, c]).subscribe(console.log);
Run Code Online (Sandbox Code Playgroud)

老实说,我很惊讶它不适用于数组,因为通过查看我认为应该的类型,请参阅https://github.com/ReactiveX/rxjs/blob/5.5.6/src/operators/zip .ts#L26。这应该是相同的用例,如 withcombineLatest以及forkJoin它的工作原理。令我惊讶的是,我最近发现它也不能Observable.concat使用。