@@ -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,34 @@ class Cursor extends EventEmitter {
213
222
cb ( )
214
223
} )
215
224
}
225
+
226
+ // Return the promise (or undefined)
227
+ return promise
216
228
}
217
229
218
230
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 ) )
231
+ var promise
232
+
233
+ if ( ! cb ) {
234
+ promise = new this . _Promise ( ( resolve , reject ) => {
235
+ cb = ( err , rows ) => ( err ? reject ( err ) : resolve ( rows ) )
236
+ } )
227
237
}
228
- if ( this . state === 'done' ) {
229
- return setImmediate ( ( ) => cb ( null , [ ] ) )
238
+
239
+ if ( this . state === 'idle' || this . state === 'submitted' ) {
240
+ this . _getRows ( rows , cb )
241
+ } else if ( this . state === 'busy' || this . state === 'initialized' ) {
242
+ this . _queue . push ( [ rows , cb ] )
243
+ } else if ( this . state === 'error' ) {
244
+ setImmediate ( ( ) => cb ( this . _error ) )
245
+ } else if ( this . state === 'done' ) {
246
+ setImmediate ( ( ) => cb ( null , [ ] ) )
230
247
} else {
231
248
throw new Error ( 'Unknown state: ' + this . state )
232
249
}
250
+
251
+ // Return the promise (or undefined)
252
+ return promise
233
253
}
234
254
}
235
255
0 commit comments