.retry当成功时,然后做x

时间:2018-02-09 15:10:17

标签: angular rxjs

我正在使用自动重新连接在我的Angular项目中实现websocket层。我有以下代码来执行自动重新连接,它正在按预期工作。

我现在需要在重新订阅成功时执行一个方法/代码块。我玩过,捕捉等等,但似乎无法将我的大脑包裹在一个解决方案中。

如果我理解了retryWhen运算符它会对错误状态起作用并基本上传递一个完整的。我可以看到这个,因为原来的websocket是关闭的,一个新的websocket是打开的。

.messages
            .map(res => { return JSON.parse(res)})
            .retryWhen(
            attempts => {
              console.log(attempts)
              return attempts
                .do((error) => { return 1 })
                .mergeMap(
                (error, count) => {
                  console.log(`Wait ${count} seconds, then retry API!`);
                  return Observable.timer(count * 1000);
                })
            })
            .share()
  • 是否有一个方法/运算符将执行一次方法/代码块 错误被清除,子订阅重新订阅 成功?

1 个答案:

答案 0 :(得分:0)

我最终不得不在retryWhen运算符链之外解决这个问题。在retryWhen运算符内的.do(error)运算符中,我将局部布尔值设置为true。

然后在我的websocket connectionStatus订阅中,如果connectionStatus == 1表示websocket已连接,而local variable == true则执行我的代码块。

似乎我通过尝试纯粹在retryWhen运算符链中解决这个问题而使事情复杂化,我没有意识到我有其他工具可以解决问题。