Javascript RxJS根据发射值重复
根据Javascript RxJS根据发射值重复,javascript,node.js,rxjs,Javascript,Node.js,Rxjs,根据条件字段中返回的值,我正在尝试重复承诺调用。以下块不起作用,因为v未定义,并随机抛出TypeError:无法读取未定义的属性“condition” console.log的o/p是{Items:[1,2,3,4,5],条件:5,时间:1513827310333} 让它与一个外部标志一起工作,每个重复都会对源进行评估 const source=Rx.Observable.defer(()=> 承诺,决心({ 项目:[1,2,3,4,5], 条件:Math.floor(Math.random
条件
字段中返回的值,我正在尝试重复
承诺调用。以下块不起作用,因为v
未定义,并随机抛出TypeError:无法读取未定义的属性“condition”
console.log的o/p是{Items:[1,2,3,4,5],条件:5,时间:1513827310333}
让它与一个外部标志一起工作,每个重复都会对源进行评估
const source=Rx.Observable.defer(()=>
承诺,决心({
项目:[1,2,3,4,5],
条件:Math.floor(Math.random()*10),
时间:+新日期()
})
);
让条件=假;
来源
.repeatWhen(通知=>{
返回通知
.scan(()=>{
返回条件;
},错)
.延迟(100)
.takeWhile(()=>{
返回条件;
});
})
.do(x=>(条件=x.condition!==0))
.finally(console.log(“完成”))
.subscribe(console.log)代码>
。作为控制台包装{最大高度:100%!重要;顶部:0;}
您还可以使用延迟
将外部状态更改为每个订阅状态:const repeats=Rx.Observable.defer(()=>{let condition;source.do(value=>condition=value.condition!==0).repeatWhen(/*etc.*/);})代码>最好避免外部状态。@cartant好主意。将对此进行测试并让您知道。在源代码之前的上一条注释的代码中应该有一个返回。然后执行最后
和上的订阅
重复
可观察,等等。
const source = Rx.Observable.fromPromise(
Promise.resolve({
Items: [1, 2, 3, 4, 5],
condition: Math.floor(Math.random() * 10),
time: +new Date()
})
);
source
.map(val => val)
.repeatWhen(val => {
return val.map(v => { // v is undefined
if (v.condition > 0) {
return Rx.Observable.of(v);
} else {
return Rx.Observable.empty();
}
});
})
.finally(() => {
done();
})
.subscribe(val => console.log(val));