var cursor = db.collection('Carreer').find();
cursor.each(function (err, results) {
// the last results call is null
});
此循环似乎额外运行了一次,返回null
作为表中每一列的最后一个值。
如何阻止cursor.each
返回null
值?
答案 0 :(得分:3)
这是cursor.each
的预期行为。 null
值指示没有其他结果(即,光标已耗尽/空并关闭)。如果您不希望在光标结束时进行额外的null
调用,则可以使用cursor.forEach
:
db.collection('Carreer').find().forEach(function(doc) {
// handle
}, function(err) {
// done or error
});
还请注意:
为什么使用null
?
cursor.each
方法只有one callback,唯一知道游标结束的方法是最后一个null
。一个示例实现可以是:
function fetchAllCareers(callback) {
const results = [];
const cursor = db.collection('Carreer').find();
cursor.each(function(error, result) {
if (error) {
callback(error);
return;
}
if (result === null) { // This was the last iteration, we finished
callback(null, results);
return;
}
results.push(result);
});
}
另一方面,cursor.forEach
方法有一个iterator callback和一个second callback,让您知道迭代已经完成。一个示例实现可以是:
function fetchAllCareers(callback) {
const results = [];
const cursor = db.collection('Carreer').find();
cursor.forEach(function(result) {
results.push(result);
}, function(error) { // all iterations finished
callback(error, results);
});
}