取消服务器流上客户端的 grpc 调用

Hos*_*ani 5 javascript node.js grpc grpc-node

我正在使用 nodejs grpc 服务器流将实时数据从服务器传送到客户端。当客户端想要监听数据时,他们应该调用返回服务器流的服务器函数。然后,如果客户端想要结束监听,我想它应该调用调用对象上的 end 方法。但不幸的是,我在文档中找不到有关如何执行此操作的任何线索。我尝试过 call.end 、 call.destroy 和 call.cancel 但 end 和 destroy 什么也没做,并且 cancel 抛出以下错误。示例客户端代码如下:

function getData(token, userId) {
    const data =  {
        token,
        userId
    }
    let call = DataService.getData(data)
    call.on('data', res => {
        console.log(res)
    })
    call.on('status', console.log);
    call.on('error', console.log);
    setTimeout(() => {
        
        console.log('destroy')

        call.cancel()
    }, 5000)
}
Run Code Online (Sandbox Code Playgroud)

错误是:

Error: 1 CANCELLED: Cancelled on client
    at Object.callErrorFromStatus (...grpc\node_modules\@grpc\grpc-js\build\src\call.js:31:26)
    at Object.onReceiveStatus (...grpc\node_modules\@grpc\grpc-js\build\src\client.js:330:49)
    at Object.onReceiveStatus (...grpc\node_modules\@grpc\grpc-js\build\src\client-interceptors.js:299:181)
    at ...grpc\node_modules\@grpc\grpc-js\build\src\call-stream.js:145:78
    at processTicksAndRejections (internal/process/task_queues.js:75:11) {
  code: 1,
  details: 'Cancelled on client',
  metadata: Metadata { internalRepr: Map(0) {}, options: {} }
}
Run Code Online (Sandbox Code Playgroud)