@@ -153,11 +153,11 @@ export class GrpcConnection implements Connection {
153153 path : string ,
154154 request : Req ,
155155 authToken : Token | null ,
156- appCheckToken : Token | null
156+ appCheckToken : Token | null ,
157+ expected_response_count_ ?: number
157158 ) : Promise < Resp [ ] > {
158159 const results : Resp [ ] = [ ] ;
159160 const responseDeferred = new Deferred < Resp [ ] > ( ) ;
160-
161161 logDebug (
162162 LOG_TAG ,
163163 `RPC '${ rpcName } ' invoked (streaming) with request:` ,
@@ -172,13 +172,24 @@ export class GrpcConnection implements Connection {
172172 ) ;
173173 const jsonRequest = { ...request , database : this . databasePath } ;
174174 const stream = stub [ rpcName ] ( jsonRequest , metadata ) ;
175+ let callback_fired_ : Boolean = false ;
175176 stream . on ( 'data' , ( response : Resp ) => {
176177 logDebug ( LOG_TAG , `RPC ${ rpcName } received result:` , response ) ;
177178 results . push ( response ) ;
179+ if (
180+ typeof expected_response_count_ !== 'undefined' &&
181+ results . length === expected_response_count_
182+ ) {
183+ callback_fired_ = true ;
184+ responseDeferred . resolve ( results ) ;
185+ }
178186 } ) ;
179187 stream . on ( 'end' , ( ) => {
180188 logDebug ( LOG_TAG , `RPC '${ rpcName } ' completed.` ) ;
181- responseDeferred . resolve ( results ) ;
189+ if ( ! callback_fired_ ) {
190+ callback_fired_ = true ;
191+ responseDeferred . resolve ( results ) ;
192+ }
182193 } ) ;
183194 stream . on ( 'error' , ( grpcError : grpc . ServiceError ) => {
184195 logDebug ( LOG_TAG , `RPC '${ rpcName } ' failed with error:` , grpcError ) ;
0 commit comments