grpc / grpc/grpc-web

cancel stream doesn't trigger end or error callback

Open
#1,065 0 comments 2 reactions 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.