.retry当成功时,然后做x

问题描述 投票:0回答:1

我正在使用自动重新连接在我的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()
  • 有没有一个方法/运算符,一旦错误被清除并且子订阅重新订阅成功,将执行一个方法/代码块?
angular rxjs
1个回答
0
投票

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

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

似乎我通过尝试纯粹在重试时解决这个问题使事情变得复杂。当我在操作员链中时,我没有意识到我有其他工具可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.