@@ -17,6 +17,7 @@ class Cursor extends EventEmitter {
17
17
this . _queue = [ ]
18
18
this . state = 'initialized'
19
19
this . _result = new Result ( this . _conf . rowMode , this . _conf . types )
20
+ this . _Promise = this . _conf . Promise || global . Promise
20
21
this . _cb = null
21
22
this . _rows = null
22
23
this . _portal = null
@@ -198,6 +199,14 @@ class Cursor extends EventEmitter {
198
199
}
199
200
200
201
close ( cb ) {
202
+ var promise
203
+
204
+ if ( ! cb ) {
205
+ promise = new this . _Promise ( ( resolve , reject ) => {
206
+ cb = ( err ) => ( err ? reject ( err ) : resolve ( ) )
207
+ } )
208
+ }
209
+
201
210
if ( ! this . connection || this . state === 'done' ) {
202
211
if ( cb ) {
203
212
return setImmediate ( cb )
@@ -213,23 +222,33 @@ class Cursor extends EventEmitter {
213
222
cb ( )
214
223
} )
215
224
}
225
+
226
+ return promise
216
227
}
217
228
218
229
read ( rows , cb ) {
219
- if ( this . state === 'idle' || this . state === 'submitted' ) {
220
- return this . _getRows ( rows , cb )
221
- }
222
- if ( this . state === 'busy' || this . state === 'initialized' ) {
223
- return this . _queue . push ( [ rows , cb ] )
224
- }
225
- if ( this . state === 'error' ) {
226
- return setImmediate ( ( ) => cb ( this . _error ) )
230
+ var result
231
+
232
+ if ( ! cb ) {
233
+ result = new this . _Promise ( ( resolve , reject ) => {
234
+ cb = ( err , rows ) => ( err ? reject ( err ) : resolve ( rows ) )
235
+ } )
227
236
}
228
- if ( this . state === 'done' ) {
229
- return setImmediate ( ( ) => cb ( null , [ ] ) )
237
+
238
+ if ( this . state === 'idle' || this . state === 'submitted' ) {
239
+ this . _getRows ( rows , cb )
240
+ } else if ( this . state === 'busy' || this . state === 'initialized' ) {
241
+ this . _queue . push ( [ rows , cb ] )
242
+ } else if ( this . state === 'error' ) {
243
+ setImmediate ( ( ) => cb ( this . _error ) )
244
+ } else if ( this . state === 'done' ) {
245
+ setImmediate ( ( ) => cb ( null , [ ] ) )
230
246
} else {
231
247
throw new Error ( 'Unknown state: ' + this . state )
232
248
}
249
+
250
+ // Return the promise (or undefined)
251
+ return result
233
252
}
234
253
}
235
254
0 commit comments