这是一个例子。在现实生活中,aSubject、bSubject 和 cSubject 是常规的 Observable 流,您可以构建,也可以从您的框架或选择等中获取。
在我的演示中,我使用BehaviorSubjects,因为从技术上讲,Subjects是Observables。
代码的Setup部分创建三个源流,formulaObservable 检查最后一个已知值的总和是否a、b、c、除以3 是0。请注意,aSubject.next(1) 在某种意义上与“普通”JS 中的a = 1 有点相似。主要区别在于.next() 在 Observable 流中创建了一个 even。
combineLatest() 运算符创建一个新的 Observable,它查看 n 个输入 Observable 流并计算这 n 个流的最后一个已知值的一些函数。
import { Observable, BehaviorSubject } from 'rxjs';
// "Setup"
const aSubject = new BehaviorSubject<number | undefined>(undefined);
const bSubject = new BehaviorSubject<number | undefined>(undefined);
const cSubject = new BehaviorSubject<number | undefined>(undefined);
const formulaObservable = Observable
.combineLatest(
aSubject,
bSubject,
cSubject,
)
.map(values => {
const [a, b, c] = values;
if (a == null || b == null || c == null) {
return Observable.never();
} else {
return (a + b + c) / 3 === 0;
}
});
formulaObservable.subscribe(result => console.warn(`Result: ${result}`));
// ---
// "Usage"
aSubject.next(1);
bSubject.next(2);
cSubject.next(1); // a===1, b===2, c===1, formulaObservable==Observable.of(false)
bSubject.next(1); // a===1, b===1, c===1, formulaObservable==Observable.of(true)
希望,它会有所帮助。
附:您可以使用交互式RxJsMarbles 来了解它们如何更好地工作。请注意,彩色球是可拖动的。
P.P.S.这是一个不错的问题,但我认为您的反对意见要么是因为您没有进行研究(没有随问题本身发布代码),要么是因为您没有在 * 上进行搜索。