【问题标题】:.retryWhen, when successful then do x.retryWhen,成功后执行 x
【发布时间】:2018-03-05 23:29:49
【问题描述】:

我正在我的 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()
  • 是否有方法/操作符可以执行一次方法/代码块 错误被清除,子订阅重新订阅 成功了吗?

【问题讨论】:

    标签: angular rxjs


    【解决方案1】:

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

    然后在我订阅我的websocket connectionStatus if connectionStatus == 1 表示websocket已经连接,并且本地变量== true 然后执行我的代码块。

    似乎我试图纯粹在 retryWhen 运算符链中解决这个问题让事情变得过于复杂,我没有意识到我有其他工具可以解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      • 2014-09-02
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多