在foreach循环中订阅多个observable <boolean>?

时间:2018-07-10 12:19:27

标签: angular typescript rxjs

我有一个带有子组件查询列表的组件。这些子组件中的每个子组件都公开两种方法,一种返回表单是否有效为observable<boolean>,另一种返回对象。

在父组件中,我想遍历子组件并检查每个子组件是否有效。我有这样的代码

    let valid: boolean = true;
    children.forEach(r => {
       r.validate().subscribe(v => {
          if(!v){
             valid = v;
             }
          });    
       });

然后在foreach循环之后,如果有效仍然为true,则继续收集对象。但是,我认为这是不正确的,因为foreach循环可能在所有可观察对象都发出值之前完成了,我也不确定将多个订阅分配给同一个变量的影响。

除了简单地使validate()方法返回常规布尔值之外,还有更好的方法吗?像forkjoin这样的东西会更好一些,因为foreach循环会将所有可观察到的对象分叉在一起并发出单个数组?

1 个答案:

答案 0 :(得分:4)

您可以使用forkJoin

  

所有可观测值完成后,从每个可观测值中发出最后一个发出的值。


import { forkJoin } from 'rxjs/observable/forkJoin';

const allObs = forkJoin(...children.map(r => r.validate()));
allObs.subscribe(res => console.log(res)); // Do what you want with the array of results