@@ -390,23 +390,37 @@ const executeOperation = (topology, operation, args, options) => {
390390 }
391391 }
392392
393- // Execute using callback
394- if ( typeof callback === 'function' ) {
395- callback = args . pop ( ) ;
396- args . push ( ( err , result ) => {
393+ const makeExecuteCallback = ( resolve , reject ) =>
394+ function executeCallback ( err , result ) {
397395 if ( session && ! options . returnsCursor ) {
398396 session . endSession ( ( ) => {
399397 delete opOptions . session ;
400- if ( err ) return callback ( err , null ) ;
401- return resultMutator ? callback ( null , resultMutator ( result ) ) : callback ( null , result ) ;
398+ if ( err ) return reject ( err ) ;
399+ if ( resultMutator ) return resolve ( resultMutator ( result ) ) ;
400+ resolve ( result ) ;
402401 } ) ;
403402 } else {
404- if ( err ) return callback ( err , null ) ;
405- return resultMutator ? callback ( null , resultMutator ( result ) ) : callback ( null , result ) ;
403+ if ( err ) return reject ( err ) ;
404+ if ( resultMutator ) return resolve ( resultMutator ( result ) ) ;
405+ resolve ( result ) ;
406406 }
407- } ) ;
407+ } ;
408408
409- return operation . apply ( null , args ) ;
409+ // Execute using callback
410+ if ( typeof callback === 'function' ) {
411+ callback = args . pop ( ) ;
412+ const handler = makeExecuteCallback (
413+ result => callback ( null , result ) ,
414+ err => callback ( err , null )
415+ ) ;
416+ args . push ( handler ) ;
417+
418+ try {
419+ return operation . apply ( null , args ) ;
420+ } catch ( e ) {
421+ handler ( e ) ;
422+ throw e ;
423+ }
410424 }
411425
412426 // Return a Promise
@@ -415,22 +429,15 @@ const executeOperation = (topology, operation, args, options) => {
415429 }
416430
417431 return new Promise ( function ( resolve , reject ) {
418- args [ args . length - 1 ] = ( err , r ) => {
419- if ( session && ! options . returnsCursor ) {
420- session . endSession ( ( ) => {
421- delete opOptions . session ;
422- if ( err ) return reject ( err ) ;
423- if ( resultMutator ) return resolve ( resultMutator ( r ) ) ;
424- resolve ( r ) ;
425- } ) ;
426- } else {
427- if ( err ) return reject ( err ) ;
428- if ( resultMutator ) return resolve ( resultMutator ( r ) ) ;
429- resolve ( r ) ;
430- }
431- } ;
432+ const handler = makeExecuteCallback ( resolve , reject ) ;
433+ args [ args . length - 1 ] = handler ;
432434
433- operation . apply ( null , args ) ;
435+ try {
436+ return operation . apply ( null , args ) ;
437+ } catch ( e ) {
438+ handler ( e ) ;
439+ throw e ;
440+ }
434441 } ) ;
435442} ;
436443
0 commit comments