Rxjs 具有可观察字段的对象数组的单一订阅

Rxjs 具有可观察字段的对象数组的单一订阅,rxjs,observable,Rxjs,Observable,我有一个对象数组,其中对象有一个类型为可观察的字段,但有另一个类型为布尔的字段。我想创建一个订阅,该订阅侦听这些可观测值,但使用布尔字段而不是可观测值 更具体地说,我使用angular,并有一个FormControl数组。我正在侦听valueChanges事件,但需要使用isValid字段将其映射到布尔值数组 我曾尝试用CombineTest映射可观测对象,但当存在多个对象时,它就无法工作 Observable.CombineRelatestThis.controls.mapc=>c.value

我有一个对象数组,其中对象有一个类型为可观察的字段,但有另一个类型为布尔的字段。我想创建一个订阅,该订阅侦听这些可观测值,但使用布尔字段而不是可观测值

更具体地说,我使用angular,并有一个FormControl数组。我正在侦听valueChanges事件,但需要使用isValid字段将其映射到布尔值数组

我曾尝试用CombineTest映射可观测对象,但当存在多个对象时,它就无法工作

Observable.CombineRelatestThis.controls.mapc=>c.valueChanges!。mapsc=>c.valid.subscribevalidations=>{ console.log'fired'; };


在本例中,只有当我有一个控件时,才会记录“fired”。一旦我将另一个控件添加到列表中,它就不工作了。

CombineTest仅在所有基础观察对象至少发出一次时才会发出,因此当存在单个FormControl时,您的示例按预期工作,但在所有FormControl发生状态更改之前不会发生任何事情

快速修复方法可能是使用:

请注意,使用此代码,您将获得一个单一的启动发射,所有验证均为true

Observable.combineLatest(
  this.controls.map(c => c.valueChanges!.map(sc => c.valid).startWith(true))
).subscribe(validations => {
  console.log('fired');
});