@@ -206,68 +206,69 @@ export class Messaging {
206
206
MessagingClientErrorCode . INVALID_ARGUMENT , 'dryRun must be a boolean' ) ;
207
207
}
208
208
209
- // const http2SessionHandler = this.useLegacyTransport ? undefined : new Http2SessionHandler(`https://${FCM_SEND_HOST}`)
210
- const http2SessionHandler = this . useLegacyTransport ? undefined : new Http2SessionHandler ( `https://localhost:3001` ) ;
211
-
209
+ const http2SessionHandler = this . useLegacyTransport ? undefined : new Http2SessionHandler ( `https://${ FCM_SEND_HOST } ` ) ;
212
210
213
211
return this . getUrlPath ( )
214
212
. then ( ( urlPath ) => {
215
- // Try listening for errors here?
216
- if ( http2SessionHandler ) {
217
- let batchResponsePromise : Promise < PromiseSettledResult < SendResponse > [ ] >
213
+ if ( http2SessionHandler ) {
214
+ let batchResponsePromise : Promise < PromiseSettledResult < SendResponse > [ ] > ;
218
215
return new Promise ( ( resolve : ( result : PromiseSettledResult < SendResponse > [ ] ) => void , reject ) => {
216
+ // Start session listeners
219
217
http2SessionHandler . invoke ( ) . catch ( ( error ) => {
220
- console . log ( "ERROR TO BE PASSED TO USER:" )
221
- console . log ( error )
222
- reject ( { error, batchResponsePromise} )
223
- } )
224
-
218
+ error . pendingBatchResponse =
219
+ batchResponsePromise ? batchResponsePromise . then ( this . parseSendResponses ) : undefined ;
220
+ reject ( error ) ;
221
+ } ) ;
225
222
223
+ // Start making requests
226
224
const requests : Promise < SendResponse > [ ] = copy . map ( async ( message ) => {
227
225
validateMessage ( message ) ;
228
- const request : { message : Message ; validate_only ?: boolean } = { message } ;
226
+ const request : { message : Message ; validate_only ?: boolean ; } = { message } ;
229
227
if ( dryRun ) {
230
228
request . validate_only = true ;
231
229
}
232
230
return this . messagingRequestHandler . invokeHttp2RequestHandlerForSendResponse (
233
- FCM_SEND_HOST , urlPath , request , http2SessionHandler ) ;
231
+ FCM_SEND_HOST , urlPath , request , http2SessionHandler ) ;
234
232
} ) ;
235
- batchResponsePromise = Promise . allSettled ( requests )
236
- batchResponsePromise . then ( resolve ) . catch ( ( error ) => {
237
- reject ( { error, batchResponsePromise} )
238
- } )
239
- } )
240
- }
241
233
242
- //
243
- const requests : Promise < SendResponse > [ ] = copy . map ( async ( message ) => {
244
- validateMessage ( message ) ;
245
- const request : { message : Message ; validate_only ?: boolean } = { message } ;
246
- if ( dryRun ) {
247
- request . validate_only = true ;
248
- }
249
- return this . messagingRequestHandler . invokeHttpRequestHandlerForSendResponse ( FCM_SEND_HOST , urlPath , request ) ;
250
- } ) ;
251
- return Promise . allSettled ( requests ) ;
252
- //
253
-
254
- } )
255
- . then ( ( results ) => {
256
- const responses : SendResponse [ ] = [ ] ;
257
- results . forEach ( result => {
258
- if ( result . status === 'fulfilled' ) {
259
- responses . push ( result . value ) ;
260
- } else { // rejected
261
- responses . push ( { success : false , error : result . reason } )
262
- }
263
- } )
264
- const successCount : number = responses . filter ( ( resp ) => resp . success ) . length ;
265
- return {
266
- responses,
267
- successCount,
268
- failureCount : responses . length - successCount ,
269
- } ;
234
+ // Resolve once all requests have completed
235
+ batchResponsePromise = Promise . allSettled ( requests ) ;
236
+ batchResponsePromise . then ( resolve ) ;
237
+ } ) ;
238
+ } else {
239
+ const requests : Promise < SendResponse > [ ] = copy . map ( async ( message ) => {
240
+ validateMessage ( message ) ;
241
+ const request : { message : Message ; validate_only ?: boolean ; } = { message } ;
242
+ if ( dryRun ) {
243
+ request . validate_only = true ;
244
+ }
245
+ return this . messagingRequestHandler . invokeHttpRequestHandlerForSendResponse (
246
+ FCM_SEND_HOST , urlPath , request ) ;
247
+ } ) ;
248
+ return Promise . allSettled ( requests ) ;
249
+ }
270
250
} )
251
+ . then ( this . parseSendResponses )
252
+ . finally ( ( ) => {
253
+ http2SessionHandler ?. close ( ) ;
254
+ } ) ;
255
+ }
256
+
257
+ private parseSendResponses ( results : PromiseSettledResult < SendResponse > [ ] ) : BatchResponse {
258
+ const responses : SendResponse [ ] = [ ] ;
259
+ results . forEach ( result => {
260
+ if ( result . status === 'fulfilled' ) {
261
+ responses . push ( result . value ) ;
262
+ } else { // rejected
263
+ responses . push ( { success : false , error : result . reason } ) ;
264
+ }
265
+ } ) ;
266
+ const successCount : number = responses . filter ( ( resp ) => resp . success ) . length ;
267
+ return {
268
+ responses,
269
+ successCount,
270
+ failureCount : responses . length - successCount ,
271
+ } ;
271
272
}
272
273
273
274
/**
0 commit comments