当 mongoose.disconnect()
从未被调用并且 Node 程序有时间执行所有回调时,我的代码可以工作。当在程序结束时调用 mongoose.disconnect() 且连接丢失时,对 mongo 的插入自然不会发生。
此异步不会等待这些插入完成。为什么会这样,我该如何解决?
mObjectList = 准备插入的对象数组
insertMongoObj: function(mObjectList, callback) {
var tasks = [];
for (i in mObjectList) {
tasks.push(mObjectList[i].save());
}
async.parallel(tasks, function(err) {
if (err) {
callback(err, 0);
}
});
callback(null, tasks.length);
}
感谢您的快速回复!按照建议更改了功能,但还是一样。当连接永远不会关闭并且程序永远不会退出时工作。 Mongoose.disconnect() 仍在这些插入之前关闭连接。
insertMongoObj : function(mObjectList, callback){
var tasks = [];
for (i in mObjectList) {
tasks.push(mObjectList[i].save.bind(mObjectList[i]));
}
async.parallel(tasks, function(err) {
if(err) return callback(err);
winston.info(" file processing ready");
});
return callback();
}
<小时/>
之前的函数调用在这里:
mongoose.connection.once('open', function () {
talendToMongo.processTalendExport(objPaths, function(){
mongoose.disconnect();
});
});
processTalendExport : function(talendEntityLocationList, callback){
var mongoObjectList = [];
var self = this;
for(obj in talendEntityLocationList){
winston.info("**Start processing directory:" + talendEntityLocationList[obj]);
var fileList = fs.readdirSync(talendEntityLocationList[obj]);
this.processEntityDir(talendEntityLocationList[obj], fileList, function(mongoObjectList){
self.insertMongoObj(mongoObjectList, function(err){
if(err) {
winston.error(" Error processing file:" + talendEntityLocationList[obj]);
process.exit(0);
} else {
winston.info(" Mongo Objects inserted");
}
});
});
}
callback();
}
insertMongoObj : function(mObjectList, callback){
var tasks = [];
for (i in mObjectList) {
tasks.push(mObjectList[i].save.bind(mObjectList[i]));
}
async.parallel(tasks, function(err) {
if(err) return callback(err);
winston.info(" file processing ready");
});
return callback();
}
最佳答案
您需要将最后一个回调调用移至 async.parallel
的回调中:
for (i in mObjectList) {
tasks.push(mObjectList[i].save.bind(mObjectList[i]));
}
async.parallel(tasks, function(err) {
if (err) {
return callback(err, 0);
}
return callback(null, tasks.length);
});
关于javascript - Node.js async.series() 不等待回调完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27018098/