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