First Commit
This commit is contained in:
commit
601e886c14
2123 files changed
+334815
No files matched your search
+66
@@ -0,0 +1,66 @@
|
||||
'use strict';
|
||||
|
||||
const Aspect = require('./operation').Aspect;
|
||||
const defineAspects = require('./operation').defineAspects;
|
||||
const handleCallback = require('../utils').handleCallback;
|
||||
const CursorState = require('../core/cursor').CursorState;
|
||||
const OperationBase = require('./operation').OperationBase;
|
||||
const push = Array.prototype.push;
|
||||
|
||||
class ToArrayOperation extends OperationBase {
|
||||
constructor(cursor) {
|
||||
super();
|
||||
|
||||
this.cursor = cursor;
|
||||
}
|
||||
|
||||
execute(callback) {
|
||||
const cursor = this.cursor;
|
||||
const items = [];
|
||||
|
||||
// Reset cursor
|
||||
cursor.rewind();
|
||||
cursor.s.state = CursorState.INIT;
|
||||
|
||||
// Fetch all the documents
|
||||
const fetchDocs = () => {
|
||||
cursor._next((err, doc) => {
|
||||
if (err) {
|
||||
return cursor._endSession
|
||||
? cursor._endSession(() => handleCallback(callback, err))
|
||||
: handleCallback(callback, err);
|
||||
}
|
||||
|
||||
if (doc == null) {
|
||||
return cursor.close({ skipKillCursors: true }, () =>
|
||||
handleCallback(callback, null, items)
|
||||
);
|
||||
}
|
||||
|
||||
// Add doc to items
|
||||
items.push(doc);
|
||||
|
||||
// Get all buffered objects
|
||||
if (cursor.bufferedCount() > 0) {
|
||||
let docs = cursor.readBufferedDocuments(cursor.bufferedCount());
|
||||
|
||||
// Transform the doc if transform method added
|
||||
if (cursor.s.transforms && typeof cursor.s.transforms.doc === 'function') {
|
||||
docs = docs.map(cursor.s.transforms.doc);
|
||||
}
|
||||
|
||||
push.apply(items, docs);
|
||||
}
|
||||
|
||||
// Attempt a fetch
|
||||
fetchDocs();
|
||||
});
|
||||
};
|
||||
|
||||
fetchDocs();
|
||||
}
|
||||
}
|
||||
|
||||
defineAspects(ToArrayOperation, Aspect.SKIP_SESSION);
|
||||
|
||||
module.exports = ToArrayOperation;
|
||||
Reference in new issue
Block a user