gpt4 book ai didi

javascript - Node.js async.series() 不等待回调完成

转载 作者:行者123 更新时间:2023-12-03 11:23:21 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com