检测可观察对象何时连续两次发出相同的值

时间:2018-10-12 20:32:30

标签: node.js websocket rxjs timeout observable

我正在通过this answer中的方法对Websocket连接使用保持活动机制:

Observable.timer(0, 5000)
  .map(i => 'ping')
  .concatMap(val => {
    return Observable.race(
      Observable.of('timeout').delay(3000),
      sendMockPing()
    );
  })

如果发生超时,我需要完全重置websocket连接(因为这很可能意味着连接断开了),但是有时单个超时可能只是随机发生(我猜是由于服务器实施不佳吗?)

我的订阅逻辑当前是这样实现的

).subscribe(result => {
  if (result === 'timeout') {
    // Reconnect to server
  }
}

有什么方法(最好使用RxJs)以某种方式映射可观察对象,以便我可以识别出它连续发射两次'timeout'的情况?

1 个答案:

答案 0 :(得分:2)

您可以使用scan运算符执行所需的操作:

source.pipe(
  scan((previous, next) => {
    if ((previous === 'timeout') && (next === 'timeout')) {
      throw new Error('Two consecutive timeouts occurred.');
    }
    return next;
  }, undefined);
);