代码之家  ›  专栏  ›  技术社区  ›  Marshal

.retryWhen,成功后执行x

  •  1
  • Marshal  · 技术社区  · 8 年前

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

    当重新订阅成功时,我现在需要执行一个方法/代码块。我一直在玩弄do、catch等,但似乎无法找到解决方案。

    如果我理解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 回复  |  直到 8 年前
        1
  •  0
  •   Marshal    8 年前

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

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

    似乎我试图纯粹在retryWhen操作链中解决这个问题过于复杂了,我没有意识到我有其他工具可以解决这个问题。

    推荐文章