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

Qum*_*ala 3 rxjs typescript angular

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

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

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

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

除了简单地使 validate() 方法返回一个常规布尔值之外,有没有更好的方法来做到这一点?像 forkjoin 这样的东西会更好吗,foreach 循环只是将所有的 observable 分叉在一起并发出一个数组?

bug*_*ugs 5

您可以使用forkJoin

当所有 observable 完成后,从每个 observable 发出最后发出的值。


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