组合将发出不同数量值的可观察对象
Combining observables that will emit differing number of values
我有 2 个 observable,它们是作为数据库查询结果的流数据,每个发出的数据量是可变的,并且可以与另一个不同。我正在尝试弄清楚如何将它们结合起来,以便我可以使用单个订阅并将发出的值推送到两个不同的数组中,例如
let firstArray = [];
let secondArray = [];
const subscription = zip(firstObservable, secondObservable)
.subscribe({
next([first, second]) {
firstArray.push(first);
secondArray.push(second);
},
error(err) {
console.log(err);
},
complete() {
console.log(firstArray);
console.log(secondArray);
}
});
这个例子的问题在于,使用 zip 会导致它们只从最短的可观测值中捕获发射值,所以如果 firstObservable
发射 2 个值而 secondObservable
发射 10 个,则两者都完成数组的长度为 2。如果这个问题根本不明确,我深表歉意,我对使用 observables 很陌生,并且正在努力完全掌握它们。任何帮助将不胜感激。
您可以使用 toArray
将所有发出的项目收集到一个数组中,并 forkJoin
等待两个 observable 完成:
import { of, forkJoin } from 'rxjs';
import { toArray } from 'rxjs/operators';
const o1 = of(1,2,3,4,5);
const o2 = of('a', 'b');
forkJoin([
o1.pipe(toArray()),
o2.pipe(toArray())
]).subscribe(console.log);
我有 2 个 observable,它们是作为数据库查询结果的流数据,每个发出的数据量是可变的,并且可以与另一个不同。我正在尝试弄清楚如何将它们结合起来,以便我可以使用单个订阅并将发出的值推送到两个不同的数组中,例如
let firstArray = [];
let secondArray = [];
const subscription = zip(firstObservable, secondObservable)
.subscribe({
next([first, second]) {
firstArray.push(first);
secondArray.push(second);
},
error(err) {
console.log(err);
},
complete() {
console.log(firstArray);
console.log(secondArray);
}
});
这个例子的问题在于,使用 zip 会导致它们只从最短的可观测值中捕获发射值,所以如果 firstObservable
发射 2 个值而 secondObservable
发射 10 个,则两者都完成数组的长度为 2。如果这个问题根本不明确,我深表歉意,我对使用 observables 很陌生,并且正在努力完全掌握它们。任何帮助将不胜感激。
您可以使用 toArray
将所有发出的项目收集到一个数组中,并 forkJoin
等待两个 observable 完成:
import { of, forkJoin } from 'rxjs';
import { toArray } from 'rxjs/operators';
const o1 = of(1,2,3,4,5);
const o2 = of('a', 'b');
forkJoin([
o1.pipe(toArray()),
o2.pipe(toArray())
]).subscribe(console.log);