Angular 6 - 比较两个 Observable 的长度

4

有没有一种方法可以比较两个可观察对象的当前长度?

编辑:是要比较可观察对象中的数组。我想比较它们内部所有元素的数量(请参见下面的示例)。

在我尝试执行此操作时,它们已经完全加载。不等待任何数据。

例如,我想做到:

if (array1.length < array2.length) {
    array1.foreach(item => item.isSelected = true);

我尝试使用pipe、map和tap,但它们会在一段时间后才能解决,并且对我不起作用。我知道这可能会违反观察者模式的概念,但我想知道是否有其他选项可以实现?


你的可观察对象产生了什么?你想比较可观察对象发出的值的数量(参见 count()),还是想比较可观察对象发出的数组的大小(如果它们是 Observable<any[]> 的情况下)。 - Capricorn
比较两个 Observables 的当前长度是不可行的,因为 Observables 没有长度。 - smnbbrv
1
在两个可观察对象中使用map/SwitchMap,将其中一个嵌套在另一个内部,然后比较它们的长度。 - Ashish Ranjan
1
https://stackblitz.com/edit/angular-jmgdyk?file=src%2Fapp%2Fapp.component.ts - Ashish Ranjan
2个回答

2

如果我使用两次subscribe,会有什么区别吗?例如:data1.subscribe(items => { data2.subscribe(items2 => { }) }); - Kris Bonev
我之前使用 switchMap 只是因为我想要订阅一次,实际上并不需要等待 ob1 完成后才开始 ob2,因为它们已经被加载了... 使用两次 subscribe 没有任何问题,除非你不想立即订阅,例如你不想在 foo() 中进行计算,但是 foo() 可能只是在进行一个 http 请求来获取 ob1ob2,而你可能会在其他地方比较结果... - Ashish Ranjan

1
一种比较长度的可能方法是使用zip操作符,如下所示:
import { of } from 'rxjs';
import {  zip } from 'rxjs';

const data = of([20, 21, 30, 40]);
const data1 = of([22, 25, 35, 45]);

const example = zip(data, data1);
example.subscribe(val => console.log(val[0].length, val[1].length));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接