这是一个例子。在现实生活中,aSubject
、bSubject
和 cSubject
是常规的 Observable
流,您可以构建,也可以从您的框架或选择等中获取。
在我的演示中,我使用BehaviorSubject
s,因为从技术上讲,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.这是一个不错的问题,但我认为您的反对意见要么是因为您没有进行研究(没有随问题本身发布代码),要么是因为您没有在 * 上进行搜索。