我正在使用自动重新连接在我的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()
答案 0 :(得分:0)
我最终不得不在retryWhen运算符链之外解决这个问题。在retryWhen运算符内的.do(error)运算符中,我将局部布尔值设置为true。
然后在我的websocket connectionStatus订阅中,如果connectionStatus == 1表示websocket已连接,而local variable == true则执行我的代码块。
似乎我通过尝试纯粹在retryWhen运算符链中解决这个问题而使事情复杂化,我没有意识到我有其他工具可以解决问题。