cancel stream doesn't trigger end or error callback
- Dominant language
- JavaScript
- Stars
- 9.3k
- Forks
- 802
- Avg merge
- 1d 7h
- Merged PRs (30d)
- 5
Description
**Problem:**
a Unary call using RPC call method, pseudo code:
```typescript
import * as grpcWeb from 'grpc-web';
const controller = new AbortController()
const rpc = new EchoServiceClient("", null, {});
const promise = new Promise((resolve, reject) => {
let completed = false; // fulfilled or rejected
const stream: grpcWeb.ClientReadableStream = rpc(
request,
metadata,
(err: grpcWeb.Error, resp: any) => {
if (err) {
completed = true;
reject(err);
return;
}
completed = true;
resolve(resp);
}
);
stream.on("end", () => { // <-- end callback is never called
if (!completed) {
reject(new Error("aborted?"));
}
});
controller.signal.addEventListener('abort', () => stream.cancel())
});
controller.abort();
await promise; // this is never resolved or rejected
```
along this line: https://github.com/grpc/grpc-web/blob/master/javascript/net/grpc/web/grpcwebclientreadablestream.js#L251, when it's aborted, shouldn't `self.sendEndCallbacks_();` be called? or send error saying aborted?
Contributor guide
Assessment
This issue has not been assessed yet.