可重试的grpc-web服务器流式rpc

问题描述

我正在尝试使用rxjs.Observable包装grpc-web服务器流客户端,并且如果服务器返回错误,则能够执行重试。

请考虑以下代码

{
  "hosting": {
    "public": "./vuepress/dist","ignore": [
      "firebase.json","**/.*","**/node_modules/**"
    ]
  }
}

服务器在(?)发出“错误”之后发出“结束”事件,因此看来我必须从可观察的源中删除“结束”处理程序。

结束/完成视频流的“ Rx-y”方式是什么?

解决方法

对于感兴趣的任何人,我最终都删除了“ end”事件处理程序,并用“ status”替换了它,如果服务器返回一个OK状态代码(表示流结束),则可观察到的是完成。

new Observable(obs => {
  const call =  new FooClient("http://localhost:8080").foo(new FooRequest())
  call.on("data",data => obs.next(data))
  call.on("error",err => obs.error(err))
  call.on("status",status: grpcWeb.Status => {
    if (status.code == grpcWeb.StatusCode.OK) {
      return observer.complete()
    }
  })
})