diff --git a/src/ParseQuery.js b/src/ParseQuery.js index 8e89e1ddd..10666034f 100644 --- a/src/ParseQuery.js +++ b/src/ParseQuery.js @@ -923,18 +923,23 @@ class ParseQuery { } let finished = false; + let previousResults = []; return continueWhile(() => { return !finished; - }, () => { - return query.find(findOptions).then((results) => { - return Promise.resolve(callback(results)).then(() => { - if (results.length >= query._limit) { - query.greaterThan('objectId', results[results.length - 1].id); - } else { - finished = true; - } - }); - }); + }, async () => { + const [results] = await Promise.all([ + query.find(findOptions), + Promise.resolve(previousResults.length > 0 && callback(previousResults)) + ]); + if (results.length >= query._limit) { + query.greaterThan('objectId', results[results.length - 1].id); + previousResults = results; + } else if (results.length > 0) { + await Promise.resolve(callback(results)); + finished = true; + } else { + finished = true; + } }); }