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操作符简化