diff --git a/packages/grpc-js/src/server.ts b/packages/grpc-js/src/server.ts index 0b05a680..8aeacdd5 100644 --- a/packages/grpc-js/src/server.ts +++ b/packages/grpc-js/src/server.ts @@ -1183,29 +1183,33 @@ async function handleUnary( metadata: Metadata, encoding: string ): Promise { - const request = await call.receiveUnaryMessage(encoding); + try { + const request = await call.receiveUnaryMessage(encoding); - if (request === undefined || call.cancelled) { - return; - } - - const emitter = new ServerUnaryCallImpl( - call, - metadata, - request - ); - - handler.func( - emitter, - ( - err: ServerErrorResponse | ServerStatusResponse | null, - value?: ResponseType | null, - trailer?: Metadata, - flags?: number - ) => { - call.sendUnaryMessage(err, value, trailer, flags); + if (request === undefined || call.cancelled) { + return; } - ); + + const emitter = new ServerUnaryCallImpl( + call, + metadata, + request + ); + + handler.func( + emitter, + ( + err: ServerErrorResponse | ServerStatusResponse | null, + value?: ResponseType | null, + trailer?: Metadata, + flags?: number + ) => { + call.sendUnaryMessage(err, value, trailer, flags); + } + ); + } catch (err) { + call.sendError(err as ServerErrorResponse) + } } function handleClientStreaming( @@ -1245,20 +1249,24 @@ async function handleServerStreaming( metadata: Metadata, encoding: string ): Promise { - const request = await call.receiveUnaryMessage(encoding); + try { + const request = await call.receiveUnaryMessage(encoding); - if (request === undefined || call.cancelled) { - return; + if (request === undefined || call.cancelled) { + return; + } + + const stream = new ServerWritableStreamImpl( + call, + metadata, + handler.serialize, + request + ); + + handler.func(stream); + } catch (err) { + call.sendError(err as ServerErrorResponse) } - - const stream = new ServerWritableStreamImpl( - call, - metadata, - handler.serialize, - request - ); - - handler.func(stream); } function handleBidiStreaming(