mirror of https://github.com/grpc/grpc-node.git
Merge pull request #1037 from murgatroid99/grpc-js_client_error_construction
Add function for creating errors from statuses
This commit is contained in:
commit
974cb30a27
|
@ -68,6 +68,20 @@ export type ClientDuplexStream<
|
|||
ResponseType
|
||||
> = ClientWritableStream<RequestType> & ClientReadableStream<ResponseType>;
|
||||
|
||||
/**
|
||||
* Construct a ServiceError from a StatusObject. This function exists primarily
|
||||
* as an attempt to make the error stack trace clearly communicate that the
|
||||
* error is not necessarily a problem in gRPC itself.
|
||||
* @param status
|
||||
*/
|
||||
export function callErrorFromStatus(status: StatusObject): ServiceError {
|
||||
const message = `${status.code} ${Status[status.code]}: ${status.details}`;
|
||||
return Object.assign(
|
||||
new Error(message),
|
||||
status
|
||||
);
|
||||
}
|
||||
|
||||
export class ClientUnaryCallImpl extends EventEmitter
|
||||
implements ClientUnaryCall {
|
||||
constructor(private readonly call: Call) {
|
||||
|
@ -118,11 +132,7 @@ function setUpReadableStream<ResponseType>(
|
|||
});
|
||||
call.on('status', (status: StatusObject) => {
|
||||
if (status.code !== Status.OK) {
|
||||
const error: ServiceError = Object.assign(
|
||||
new Error(status.details),
|
||||
status
|
||||
);
|
||||
stream.emit('error', error);
|
||||
stream.emit('error', callErrorFromStatus(status));
|
||||
}
|
||||
stream.emit('status', status);
|
||||
statusEmitted = true;
|
||||
|
|
|
@ -25,6 +25,7 @@ import {
|
|||
ClientWritableStream,
|
||||
ClientWritableStreamImpl,
|
||||
ServiceError,
|
||||
callErrorFromStatus,
|
||||
} from './call';
|
||||
import { CallCredentials } from './call-credentials';
|
||||
import { Call, Deadline, StatusObject, WriteObject } from './call-stream';
|
||||
|
@ -151,11 +152,7 @@ export class Client {
|
|||
if (status.code === Status.OK) {
|
||||
callback(null, responseMessage as ResponseType);
|
||||
} else {
|
||||
const error: ServiceError = Object.assign(
|
||||
new Error(status.details),
|
||||
status
|
||||
);
|
||||
callback(error);
|
||||
callback(callErrorFromStatus(status));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -160,7 +160,6 @@ describe('Cancellation', () => {
|
|||
call.on('error', (error: ServiceError) => {
|
||||
assert.strictEqual(error.code, grpc.status.CANCELLED);
|
||||
assert.strictEqual(error.details, 'Cancelled on client');
|
||||
assert.strictEqual(error.message, 'Cancelled on client');
|
||||
waitForServerCancel();
|
||||
});
|
||||
|
||||
|
|
Loading…
Reference in New Issue