如何从retryWhen运算符的可观察值中发出值?

时间:2019-06-04 11:26:38

标签: angular websocket rxjs

当前正在使用retryWhen运算符断开Websocket的连接。

在Websocket断开连接到Websocket重新连接之间,我想向用户显示通知。

因此,当连接websocket时,它将返回(示例):

{
  status: 'CONNECTED'
}

,并且在连接和重新连接阶段之间的时间段内,它将返回(示例):

{
  status: 'CONNECTING'
}

我的问题是,可观察到的成功和错误处理程序仅在websocket重新连接(成功)或完成重试(错误)时才运行。

本质上,我想做的是在retryWhen运算符运行时但在尝试重新连接之前从可观察的对象发出一个值。

public getSocket(): Observable<T> {
      return this.socket$
      .retryWhen((errors: Observable<T>) => {
        return Observable.of({
          status: 'CONNECTING'
        })
        .concat(
          errors
          .delay(this.TIMEOUT_INTERVAL)
          .concat(
            Observable.throw(errors)
          )
        );
      })
      .retry();
    }

对于成功重新连接的websocket,我希望从可观察对象发出的值是:

status === 'CONNECTED'
status === 'CONNECTING'
status === 'CONNECTED

对于无法重新连接的websocket,我希望从可观察对象发出的值是:

status === 'CONNECTED'
status === 'CONNECTING'
status === 'DISCONNECTED

0 个答案:

没有答案