Javascript 连续观测值
我想串行执行返回可观察值的函数。我已经设法做到了这一点,但这不是一个非常务实的解决方案。要实现以下目标,哪种方法更具反应性Javascript 连续观测值,javascript,c#,system.reactive,rxjs,Javascript,C#,System.reactive,Rxjs,我想串行执行返回可观察值的函数。我已经设法做到了这一点,但这不是一个非常务实的解决方案。要实现以下目标,哪种方法更具反应性 import Rx from 'rx' export default class Executor { constructor() { this.queue = [] this.draining = false } run(fn) { return Rx.Observable.create(o => { this.
import Rx from 'rx'
export default class Executor {
constructor() {
this.queue = []
this.draining = false
}
run(fn) {
return Rx.Observable.create(o => {
this.queue.push(Rx.Observable.defer(() =>
fn()
.doOnNext((value) => o.onNext(value))
.doOnError((err) => o.onError(err))
.doOnCompleted(() => o.onCompleted())))
async () => {
if (this.draining) {
return
}
this.draining = true
while (this.queue.length > 0) {
try {
await this.queue.shift().toPromise()
} catch(err) {
// Do nothing...
}
}
this.draining = false
}()
})
}
}
不完全确定你想要实现什么,但听起来你在追求操作员
从“Rx”导入Rx
导出默认类执行器{
构造函数(){
//队列:()=>可观察
this.queue=new Rx.Subject();
这个队列
.flatMapWithMaxConcurrent(1,
fn=>fn().catch(Rx.Observable.empty())//替换为正确的错误处理
)
.subscribe(结果=>console.log(结果));
}
推送(fn){
this.queue.onNext(fn);
}
}
不完全确定您要实现什么目标,但听起来您在追求操作员
从“Rx”导入Rx
导出默认类执行器{
构造函数(){
//队列:()=>可观察
this.queue=new Rx.Subject();
这个队列
.flatMapWithMaxConcurrent(1,
fn=>fn().catch(Rx.Observable.empty())//替换为正确的错误处理
)
.subscribe(结果=>console.log(结果));
}
推送(fn){
this.queue.onNext(fn);
}
}
您能详细说明一下您想要实现的功能吗?我想连续执行可观察的功能,例如,在客户机-服务器通信中,在整个活动回复完成之前,不允许客户机发送更多消息。也许会有所帮助?这个问题带来了一点矛盾。Rx是关于“反应性”的,在事件发生时作出反应。然而,你试图只对特定顺序的事件做出反应,但要问“哪种反应方式更积极”。也就是说,我认为这可以通过flatmapwithmaxconcurrent操作符简化。你能详细说明你想要实现的是什么吗?我想串行执行可观察函数,例如,在客户机-服务器通信中,在整个活动回复完成之前,不允许客户机发送更多消息。可能会有所帮助?这个问题带来了一点矛盾。Rx是关于“反应性”的,在事件发生时作出反应。然而,你试图只对特定顺序的事件做出反应,但要问“哪种反应方式更积极”。也就是说,我认为这可以通过flatmapwithmaxconcurrent操作符简化