@@ -53,54 +53,45 @@ function executeOperation(topology, operation, callback) {
53
53
}
54
54
}
55
55
56
- const makeExecuteCallback = ( resolve , reject ) =>
57
- function executeCallback ( err , result ) {
58
- if ( session && session . owner === owner ) {
59
- session . endSession ( ( ) => {
60
- if ( operation . session === session ) {
61
- operation . clearSession ( ) ;
62
- }
63
- if ( err ) return reject ( err ) ;
64
- resolve ( result ) ;
65
- } ) ;
66
- } else {
56
+ let result ;
57
+ if ( typeof callback !== 'function' ) {
58
+ result = new Promise ( ( resolve , reject ) => {
59
+ callback = ( err , res ) => {
67
60
if ( err ) return reject ( err ) ;
68
- resolve ( result ) ;
69
- }
70
- } ;
71
-
72
- // Execute using callback
73
- if ( typeof callback === 'function' ) {
74
- const handler = makeExecuteCallback (
75
- result => callback ( null , result ) ,
76
- err => callback ( err , null )
77
- ) ;
61
+ resolve ( res ) ;
62
+ } ;
63
+ } ) ;
64
+ }
78
65
79
- try {
80
- if ( operation . hasAspect ( Aspect . EXECUTE_WITH_SELECTION ) ) {
81
- return executeWithServerSelection ( topology , operation , handler ) ;
82
- } else {
83
- return operation . execute ( handler ) ;
66
+ function executeCallback ( err , result ) {
67
+ if ( session && session . owner === owner ) {
68
+ session . endSession ( ) ;
69
+ if ( operation . session === session ) {
70
+ operation . clearSession ( ) ;
84
71
}
85
- } catch ( e ) {
86
- handler ( e ) ;
87
- throw e ;
88
72
}
89
- }
90
73
91
- return new Promise ( function ( resolve , reject ) {
92
- const handler = makeExecuteCallback ( resolve , reject ) ;
74
+ callback ( err , result ) ;
75
+ }
93
76
94
- try {
95
- if ( operation . hasAspect ( Aspect . EXECUTE_WITH_SELECTION ) ) {
96
- return executeWithServerSelection ( topology , operation , handler ) ;
97
- } else {
98
- return operation . execute ( handler ) ;
77
+ try {
78
+ if ( operation . hasAspect ( Aspect . EXECUTE_WITH_SELECTION ) ) {
79
+ executeWithServerSelection ( topology , operation , executeCallback ) ;
80
+ } else {
81
+ operation . execute ( executeCallback ) ;
82
+ }
83
+ } catch ( e ) {
84
+ if ( session && session . owner === owner ) {
85
+ session . endSession ( ) ;
86
+ if ( operation . session === session ) {
87
+ operation . clearSession ( ) ;
99
88
}
100
- } catch ( e ) {
101
- handler ( e ) ;
102
89
}
103
- } ) ;
90
+
91
+ throw e ;
92
+ }
93
+
94
+ return result ;
104
95
}
105
96
106
97
function supportsRetryableReads ( server ) {
0 commit comments