Skip to content

Commit 6339625

Browse files
committed
fix(cursor): hasNext should propagate errors when using callback
NODE-1119
1 parent 75f1135 commit 6339625

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

lib/cursor.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,8 @@ Cursor.prototype.hasNext = function(callback) {
221221
return callback(null, true);
222222
} else {
223223
return nextObject(self, function(err, doc) {
224-
if(!doc) return callback(null, false);
224+
if (err) return callback(err, null);
225+
if (!doc) return callback(null, false);
225226
self.s.currentDoc = doc;
226227
callback(null, true);
227228
});

test/functional/cursor_tests.js

+26
Original file line numberDiff line numberDiff line change
@@ -3745,3 +3745,29 @@ exports['Correcly decorate the collection cursor count command with skip, limit,
37453745
});
37463746
}
37473747
}
3748+
3749+
exports['Should propagate hasNext errors when using a callback'] = {
3750+
metadata: { requires: { topology: ['single', 'replicaset', 'sharded', 'ssl', 'heap', 'wiredtiger'] } },
3751+
test: function(configuration, test) {
3752+
var client = configuration.newDbInstance({ w: 1 }, { poolSize: 1, auto_reconnect: false });
3753+
client.connect(function(err, client) {
3754+
test.equal(null, err);
3755+
3756+
var db = client.db(configuration.database);
3757+
var findCommand = {
3758+
find: 'integration_tests.has_next_error_callback',
3759+
limit: 0,
3760+
skip: 0,
3761+
query: {},
3762+
slaveOk: false
3763+
};
3764+
3765+
var cursor = db.s.topology.cursor(db.s.namespace, findCommand, { readPreference: 42 });
3766+
cursor.hasNext(function(err, hasNext) {
3767+
test.ok(err !== null);
3768+
test.equal(err.message, 'readPreference must be a ReadPreference instance');
3769+
test.done();
3770+
});
3771+
});
3772+
}
3773+
}

0 commit comments

Comments
 (0)