[英]How to exit properly from node.js
以下内容将从磁盘读取许多CSV文件并将其导入到MongoDB中,但是如果不通过resizePhoto()函数(在调整图像大小后包含process.exit),则导入所有文件后NodeJS不会退出。
导入所有文件后如何在不中断的情况下正确关闭它? 如果我添加一个process.exit .on最后,它将在导入第一个文件后退出。
var importData = function(fileName) {
// Get file from disk.
var filePath = path.join(folder, fileName);
// Read and import the CSV file.
csv.fromPath(filePath, {
objectMode: true,
headers: keys
})
.on('data', function (data) {
var Obj = new models[fileName](data);
models[fileName].find({}).remove().exec();
Obj.save(function (err, importedObj) {
if (err) {
console.log(fileName, err);
} else if (fileName === 'PHOTOS') {
resizePhoto(importedObj);
}
});
})
.on('end', function() {
console.log(fileName + ': Imported.');
});
};
module.exports = importData;
使用模块async ,方法parallel ( https://github.com/caolan/async#parallel )。 它可以并行调用您的任务(导入),并在所有任务结束后调用最终处理程序(退出)。
在您的情况下:
1)项目中的某个地方
csvImp=require('importData.js');
async.parallel([
function(done){csvImp(name1,done);},
function(done){csvImp(name2,done);},
...
function(done){csvImp(nameN,done);}
],
function(err, results){
process.exit();
});
2)在importData.js中
var importData = function(fileName,done) {
...
.on('end', function() {
console.log(fileName + ': Imported.');
done();
});
因此,接下来您需要准备任务列表。 就像是
names.forEach(function(n){
tasks.push(function(done){csvImp(n,done);});
});
并与任务调用async.parallel 。
祝好运)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.