@@ -59,6 +59,7 @@ export class Client {
5959 call : CallStream , deserialize : ( value : Buffer ) => ResponseType ,
6060 callback : UnaryCallback < ResponseType > ) : void {
6161 let responseMessage : ResponseType | null = null ;
62+ let statusEmitted = false ;
6263 call . on ( 'data' , ( data : Buffer ) => {
6364 if ( responseMessage != null ) {
6465 call . cancelWithStatus ( Status . INTERNAL , 'Too many responses received' ) ;
@@ -73,6 +74,8 @@ export class Client {
7374 call . on ( 'end' , ( ) => {
7475 if ( responseMessage == null ) {
7576 call . cancelWithStatus ( Status . INTERNAL , 'Not enough responses received' ) ;
77+ } else if ( statusEmitted ) {
78+ callback ( null , responseMessage as ResponseType ) ;
7679 }
7780 } ) ;
7881 call . on ( 'status' , ( status : StatusObject ) => {
@@ -81,7 +84,11 @@ export class Client {
8184 * Therefore, considering the above event handlers, status.code should be
8285 * OK if and only if we have a non-null responseMessage */
8386 if ( status . code === Status . OK ) {
84- callback ( null , responseMessage as ResponseType ) ;
87+ if ( responseMessage !== null ) {
88+ callback ( null , responseMessage as ResponseType ) ;
89+ } else {
90+ statusEmitted = true ;
91+ }
8592 } else {
8693 const error = new ServiceErrorImpl ( status . details ) ;
8794 error . code = status . code ;
0 commit comments