1
1
'use strict'
2
2
3
3
const DOMAIN_TO_SESSION = new WeakMap ( )
4
- const Promise = require ( 'bluebird' )
5
4
6
5
const TxSessionConnectionPair = require ( './lib/tx-session-connpair.js' )
7
6
const SessionConnectionPair = require ( './lib/session-connpair.js' )
@@ -44,20 +43,16 @@ const api = module.exports = {
44
43
} ,
45
44
46
45
atomic ( operation ) {
47
- return function atomic$operation ( ) {
48
- return Promise . try ( ( ) => {
49
- const args = [ ] . slice . call ( arguments )
50
- return api . session . atomic ( operation . bind ( this ) , args )
51
- } )
46
+ return async function atomic$operation ( ) {
47
+ const args = [ ] . slice . call ( arguments )
48
+ return await api . session . atomic ( operation . bind ( this ) , args )
52
49
}
53
50
} ,
54
51
55
52
transaction ( operation ) {
56
- return function transaction$operation ( ) {
57
- return Promise . try ( ( ) => {
58
- const args = [ ] . slice . call ( arguments )
59
- return api . session . transaction ( operation . bind ( this ) , args )
60
- } )
53
+ return async function transaction$operation ( ) {
54
+ const args = [ ] . slice . call ( arguments )
55
+ return await api . session . transaction ( operation . bind ( this ) , args )
61
56
}
62
57
} ,
63
58
@@ -140,15 +135,16 @@ class Session {
140
135
} , operation , args )
141
136
142
137
const releasePair = getConnPair . then ( pair => {
143
- return getResult . reflect ( ) . then ( result => {
138
+ return getResult . then ( result => {
144
139
this . metrics . onTransactionFinish ( baton , operation , args , result )
145
- return result . isFulfilled ( )
146
- ? pair . release ( )
147
- : pair . release ( result . reason ( ) )
140
+ return pair . release ( )
141
+ } ) . catch ( reason => {
142
+ this . metrics . onTransactionFinish ( baton , operation , args , reason )
143
+ return pair . release ( reason )
148
144
} )
149
145
} )
150
146
151
- return releasePair . return ( getResult )
147
+ return releasePair . then ( ( ) => getResult )
152
148
}
153
149
154
150
atomic ( operation , args ) {
@@ -209,15 +205,16 @@ class TransactionSession {
209
205
} , operation , args )
210
206
211
207
const releasePair = atomicConnPair . then ( pair => {
212
- return getResult . reflect ( ) . then ( result => {
208
+ return getResult . then ( result => {
213
209
this . metrics . onAtomicFinish ( baton , operation , args , result )
214
- return result . isFulfilled ( )
215
- ? pair . release ( )
216
- : pair . release ( result . reason ( ) )
210
+ return pair . release ( )
211
+ } ) . catch ( reason => {
212
+ this . metrics . onAtomicFinish ( baton , operation , args , reason )
213
+ return pair . release ( reason )
217
214
} )
218
215
} )
219
216
220
- return releasePair . return ( getResult )
217
+ return releasePair . then ( ( ) => getResult )
221
218
}
222
219
223
220
// NB: for use in tests _only_!)
@@ -233,59 +230,64 @@ class AtomicSession extends TransactionSession {
233
230
}
234
231
}
235
232
236
- function Session$RunWrapped ( parent ,
237
- createSession ,
238
- getConnPair ,
239
- before ,
240
- after ,
241
- operation ,
242
- args ) {
243
- return getConnPair . then ( pair => {
233
+ function Session$RunWrapped (
234
+ parent ,
235
+ createSession ,
236
+ getConnPair ,
237
+ before ,
238
+ after ,
239
+ operation ,
240
+ args
241
+ ) {
242
+ return getConnPair . then ( ( pair ) => {
244
243
const subdomain = domain . create ( )
245
244
const session = createSession ( pair )
246
245
parent . metrics . onSubsessionStart ( parent , session )
247
246
DOMAIN_TO_SESSION . set ( subdomain , session )
248
247
249
248
const runBefore = new Promise ( ( resolve , reject ) => {
250
- return pair . connection . query (
251
- before ,
252
- err => err ? reject ( err ) : resolve ( )
249
+ return pair . connection . query ( before , ( err ) =>
250
+ err ? reject ( err ) : resolve ( )
253
251
)
254
252
} )
255
253
256
254
return runBefore . then ( ( ) => {
257
255
const getResult = Promise . resolve (
258
- subdomain . run ( ( ) => Promise . try ( ( ) => {
259
- return operation . apply ( null , args )
260
- } ) )
256
+ subdomain . run ( ( ) => {
257
+ return Promise . resolve ( ) . then ( ( ) => {
258
+ return operation . apply ( null , args )
259
+ } )
260
+ } )
261
261
)
262
262
263
- const reflectedResult = getResult . reflect ( )
263
+ const waitOperation = getResult
264
+ . then ( ( result ) => {
265
+ return Promise . all ( [
266
+ Promise . resolve ( result ) ,
267
+ Promise . resolve ( session . operation ) ,
268
+ ] )
269
+ } )
270
+ . finally ( ( ) => {
271
+ markInactive ( subdomain )
272
+ } )
264
273
265
- const waitOperation = Promise . join (
266
- reflectedResult ,
267
- reflectedResult . then ( ( ) => session . operation )
268
- )
269
- . finally ( markInactive ( subdomain ) )
270
- . return ( reflectedResult )
271
-
272
- const runCommitStep = waitOperation . then ( result => {
273
- return new Promise ( ( resolve , reject ) => {
274
- return pair . connection . query (
275
- result . isFulfilled ( )
276
- ? after . success
277
- : after . failure ,
278
- err => err ? reject ( err ) : resolve ( )
279
- )
274
+ const runCommitStep = waitOperation
275
+ . then ( ( [ result ] ) => {
276
+ return new Promise ( ( resolve , reject ) => {
277
+ return pair . connection . query (
278
+ result ? after . success : after . failure ,
279
+ ( err ) => ( err ? reject ( err ) : resolve ( ) )
280
+ )
281
+ } )
280
282
} )
281
- } ) . then (
282
- ( ) => parent . metrics . onSubsessionFinish ( parent , session ) ,
283
- err => {
284
- parent . metrics . onSubsessionFinish ( parent , session )
285
- throw err
286
- }
287
- )
288
- return runCommitStep . return ( getResult )
283
+ . then (
284
+ ( ) => parent . metrics . onSubsessionFinish ( parent , session ) ,
285
+ ( err ) => {
286
+ parent . metrics . onSubsessionFinish ( parent , session )
287
+ throw err
288
+ }
289
+ )
290
+ return runCommitStep . then ( ( ) => getResult )
289
291
} )
290
292
} )
291
293
}
0 commit comments