我有一个关于可观测的数组,我想得到一个唯一的可观测值,如果我的数组中的所有可观测值都返回真的话,它将返回true。
我试过这个,但似乎没有用:
const t = [Observable.of(true), Observable.of(false)];
let obs = Observable.of(true);
t.forEach(o => obs = obs.concat(o));
const obsResult = obs.pipe(
takeWhile(val => val !== false),
reduce((acc, val) => acc && val)
);
obsResult.subscribe(r => console.log('result', r));t[1]是假的,所以我希望obsResult发送false,但是我得到了true
发布于 2017-12-01 22:10:49
纯粹在溪流中工作:
.from将可观察到的数组封装到一个新的流中。.concatAll(),用于打开内部可观测值(数组中的可观测值)的新流。.every,它接受一个谓词函数来测试随后未包装的可观测值的值。现在,您将有一个函数返回一个可观察的函数,该函数将根据可观测值数组的聚合值发出true/false值。
console.clear();
const obsSetF = [Rx.Observable.of(true), Rx.Observable.of(false)];
const obsSetT = [Rx.Observable.of(true), Rx.Observable.of(true)];
function allTrue(obsSet) {
return Rx.Observable
.from(obsSet)
.concatAll()
.every(a => a === true)
}
allTrue(obsSetF).subscribe(console.log);
allTrue(obsSetT).subscribe(console.log);<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.3/Rx.min.js"></script>
发布于 2017-12-02 04:51:54
combineLatest怎么样?
这将使用可观测值中传递的最新值来发出值。下面是它的工作方式的一个很好的可视化:combineLatest RxMarbles
但是,在这种情况下,最好不要传递项目函数,因为您只想做一个逻辑的、多个可观察的函数。
静态版本的Observable.combineLatest可以接收可观察到的数组,并将其值作为数组发布。
这里有一个例子
console.clear();
const tf = [Rx.Observable.of(true), Rx.Observable.of(false)];
const tt = [Rx.Observable.of(true), Rx.Observable.of(true)];
const obsResult =
// if no projection function is passed to combineLatest
// then it will emit an array of the latest values from the provided
// observables in this case [true, false]
Rx.Observable.combineLatest(tf)
// map the output of this observable and perform a reduce to and
// every value in the array
.map((xs) => xs.reduce((acc, x) => acc && x));
obsResult.subscribe(r => console.log('result', r));<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.0.2/Rx.min.js"></script>
https://stackoverflow.com/questions/47600513
复制相似问题