Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 订阅多个可观察对象<;布尔值>;在foreach循环中?_Angular_Typescript_Rxjs - Fatal编程技术网

Angular 订阅多个可观察对象<;布尔值>;在foreach循环中?

Angular 订阅多个可观察对象<;布尔值>;在foreach循环中?,angular,typescript,rxjs,Angular,Typescript,Rxjs,我有一个带有子组件查询列表的组件。这些子组件中的每一个子组件都公开了两个方法,一个返回窗体是否作为可观察对象有效,另一个返回对象 在父组件中,我希望遍历子组件并检查每个子组件是否有效。我有这样的代码 let valid: boolean = true; children.forEach(r => { r.validate().subscribe(v => { if(!v){ valid = v;

我有一个带有子组件查询列表的组件。这些子组件中的每一个子组件都公开了两个方法,一个返回窗体是否作为可观察对象有效,另一个返回对象

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

    let valid: boolean = true;
    children.forEach(r => {
       r.validate().subscribe(v => {
          if(!v){
             valid = v;
             }
          });    
       });
然后,如果foreach循环后valid仍然为true,它将继续收集对象。然而,我认为这是不正确的,因为foreach循环可能在所有可观察对象发出值之前完成。我也不确定为同一变量分配多个订阅的效果

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

您可以使用

当所有观测值完成时,从每个观测值发出最后发出的值



好的,太好了!这也是我的倾向,我只是不确定它的“正确性”。当我有你的耳朵时,我可以问一下吗?你通常是这样在整个应用程序中使用可观察的吗?一般来说,我对rxjs和angular都是新手,但可组合、异步数据流的想法听起来很有吸引力,所以这就是我的目标,但有时感觉有点混乱。@Qumbaala使用rxjs(以及一般的可观测数据)在大多数情况下绝对是个好主意,尤其是当应用程序的主要任务是对数据执行操作时,以异步方式传递并重复所有这些操作(这通常适用于大多数应用程序)。看一看反应式编程的优秀指南一开始它会感到混乱的原因是它通常需要改变思维方式,因为RxJS与人们习惯的做事方式大不相同。你很快就会习惯的谢谢你的帮助!我每周使用knockout大约45小时,虽然它有计算/观察的概念,但rxjs是这个想法的一个更健壮的实现。你说得对,我越是使用它,我就越喜欢它。似乎他们在任何场合都是一名接线员。再次感谢!
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