![](/img/trans.png)
[英]node.js mongodb - collection.find().toArray(callback) - callback doesn't get called
[英]node.js mongodb - collection.find().toArray(callback) returns empty
mydocuments.find({})。toArray在下面的代码中返回空。 由于使用MongoClient.connect,我可以看到一些解决方案已发布但未应用。 任何帮助将不胜感激。
var MONGOHQ_URL="mongodb://harishvc:supersecretreally@something.com:12345/abcd";
var mongodb = require('mongodb');
MongoClient = mongodb.MongoClient;
var async = require('async');
….
async.series([
function (callback) {
console.log("start: db connection");
MongoClient.connect(MONGOHQ_URL, { server: { auto_reconnect: true } }, function(err, db2) {
if (err) {return callback(err, "connect error");}
db = db2;
console.log("end: db connection");
callback(null,"end: db connection");
});
},
function (callback) {
console.log("start: getting handle to collection");
mydocuments = db.collection('test');
console.log("end: getting handle to collection");
callback(null,"end: getting handle to collection");
},
function (callback) {
console.log ("start: inserting new entries ....");
mydocuments.insert({i:1},callback);
console.log ("end: inserting new entries ....");
callback(null,"end: inserting new entries");
},
function (callback) {
console.log("start: listing all entries ....");
mydocuments.find({}).toArray(function(err, docs) {
if (err) {return callback(err, "connect error");}
// Does not get executed???
console.log("Hello World!");
});
console.log("end: listing all entries ....");
callback(null,"end: listing all entries");
}],
…..
产量
start: db connection
end: db connection
start: getting handle to collection
end: getting handle to collection
start: inserting new entries ....
end: inserting new entries ....
start: listing all entries ....
end: listing all entries ....
问题出在插入数据的第三个功能中。 尽管您传递了回调,但是此插入是异步的,因此它将继续执行下面两行代码:
console.log ("end: inserting new entries ....");
callback(null,"end: inserting new entries");
第3个函数中的第2个callback()调用告诉async继续并继续执行find()的第4个函数。 此时,您从第3个函数进行的插入可能尚未完成。 这就是为什么在第4个函数中查找结果为空的原因。
您的第三个函数应如下所示:
function (callback) {
console.log ("start: inserting new entries ....");
mydocuments.insert({i:1},function(err) {
if (err) {
callback(err, "error inserting");
} else {
callback(null,"end: inserting new entries");
}
console.log ("end: inserting new entries ....");
});
},
这样可以确保您在执行下一个执行find()的下一个函数(4th)之前完成对第3个函数的插入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.