| 'use strict'; | 
|   | 
| const Aspect = require('./operation').Aspect; | 
| const defineAspects = require('./operation').defineAspects; | 
| const loadCursor = require('../dynamic_loaders').loadCursor; | 
| const OperationBase = require('./operation').OperationBase; | 
| const nextObject = require('./common_functions').nextObject; | 
|   | 
| class HasNextOperation extends OperationBase { | 
|   constructor(cursor) { | 
|     super(); | 
|   | 
|     this.cursor = cursor; | 
|   } | 
|   | 
|   execute(callback) { | 
|     const cursor = this.cursor; | 
|     let Cursor = loadCursor(); | 
|   | 
|     if (cursor.s.currentDoc) { | 
|       return callback(null, true); | 
|     } | 
|   | 
|     if (cursor.isNotified()) { | 
|       return callback(null, false); | 
|     } | 
|   | 
|     nextObject(cursor, (err, doc) => { | 
|       if (err) return callback(err, null); | 
|       if (cursor.s.state === Cursor.CLOSED || cursor.isDead()) return callback(null, false); | 
|       if (!doc) return callback(null, false); | 
|       cursor.s.currentDoc = doc; | 
|       callback(null, true); | 
|     }); | 
|   } | 
| } | 
|   | 
| defineAspects(HasNextOperation, Aspect.SKIP_SESSION); | 
|   | 
| module.exports = HasNextOperation; |