Skip to content

Commit 3451070

Browse files
authored
fix(Query): scan returns same object repeatly (#674)
1 parent f3025b3 commit 3451070

File tree

1 file changed

+29
-34
lines changed

1 file changed

+29
-34
lines changed

src/query.js

Lines changed: 29 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)