RXJS5队列一些流直到事件然后正常处理

时间:2018-03-01 19:38:34

标签: node.js rxjs rxjs5

我正在处理来自GDAX的websocket的数据,这些数据实时发出交易状态(来源B)。为了构建完整的订单簿,我需要通过API调用(源A)获取本书的当前快照。

首先我处理包含序列号的源A,而我正在处理它,我正在从源B排队事件。一旦处理源A我发出“SYNCED”状态,当收到SYNCED时我释放所有排队来自B的事件作为数组并丢弃来自源A的序列号之前的任何事件,然后处理它们。在释放排队事件时,应该实时处理来自B的任何传入事件。

enter image description here

源B可以在任何时候丢弃一个事件,当发生这种情况时,我将状态重置为空白,调用源A并重复该过程。

现在,我正在尝试在RXJS中使用缓冲区,但它只是在发出SYNCED之前释放事件,然后开始缓冲B直到再次调用该事件。这是不同的,因为我只想在同步进行过程中排队事件,然后一旦完成,我想处理背压事件,然后在事件进入时处理事件。我不确定如何在可观察的条款......到目前为止我的内容是:

Observable
  .fromEvent(this.ws$, 'message')
  .map((m: any) => m.data)
  .map((s: string) => JSON.parse(s))
  .buffer(process$)
  .flatMap(_ => _)
  .filter((message: any) => message.sequence > this.sequence)
  .subscribe((message: any) => {
    if (message.sequence !== this.sequence + 1) {
      throw new Error("Out of sync");
    }
    this.sequence = message.sequence;
    this.emit('message', message);
  }, (err: any) => {
    throw new Error(err);
  });

0 个答案:

没有答案