@@ -438,45 +438,40 @@ module.exports = function(AV) {
438438 }
439439 if ( orderedBy ) condition . scan_key = orderedBy ;
440440 if ( batchSize ) condition . limit = batchSize ;
441- let promise = Promise . resolve ( [ ] ) ;
442441 let cursor ;
443- let endReached = false ;
442+ let remainResults = [ ] ;
444443 return {
445444 next : ( ) => {
446- promise = promise . then ( remainResults => {
447- if ( endReached ) return [ ] ;
448- if ( remainResults . length > 1 ) return remainResults ;
449- // no cursor means we have reached the end
450- // except for the first time
451- if ( ! cursor && remainResults . length !== 0 ) {
452- endReached = true ;
453- return remainResults ;
445+ if ( remainResults . length ) {
446+ return Promise . resolve ( {
447+ done : false ,
448+ value : remainResults . shift ( ) ,
449+ } ) ;
450+ }
451+ if ( cursor === null ) {
452+ return Promise . resolve ( { done : true } ) ;
453+ }
454+ return _request (
455+ 'scan/classes' ,
456+ this . className ,
457+ null ,
458+ 'GET' ,
459+ cursor ? _ . extend ( { } , condition , { cursor } ) : condition ,
460+ authOptions
461+ ) . then ( response => {
462+ cursor = response . cursor ;
463+ if ( response . results . length ) {
464+ const results = this . _parseResponse ( response ) ;
465+ results . forEach ( result => remainResults . push ( result ) ) ;
454466 }
455- // when only 1 item left in queue
456- // start the next request to see if it is the last one
457- return _request (
458- 'scan/classes' ,
459- this . className ,
460- null ,
461- 'GET' ,
462- cursor ? _ . extend ( { } , condition , { cursor } ) : condition ,
463- authOptions
464- )
465- . then ( response => {
466- cursor = response . cursor ;
467- return this . _parseResponse ( response ) ;
468- } )
469- . then ( results => {
470- if ( ! results . length ) endReached = true ;
471- return remainResults . concat ( results ) ;
472- } ) ;
467+ if ( cursor === null && remainResults . length === 0 ) {
468+ return { done : true } ;
469+ }
470+ return {
471+ done : false ,
472+ value : remainResults . shift ( ) ,
473+ } ;
473474 } ) ;
474- return promise
475- . then ( remainResults => remainResults . shift ( ) )
476- . then ( result => ( {
477- value : result ,
478- done : result === undefined ,
479- } ) ) ;
480475 } ,
481476 } ;
482477 } ,
0 commit comments