如何从node.js正确退出

时间:2015-08-31 00:11:29

标签: javascript node.js mongodb

以下内容将读取并将许多CSV文件从磁盘导入MongoDB,但如果没有通过resizePhoto()函数(在调整图像大小后包含process.exit),导入所有文件后,NodeJS将不会退出)。

如何在不中断导入所有文件后正确关闭它?如果我添加了process.exit .on end,它将在导入第一个文件后退出。

package general

import scala.collection.mutable.Stack
import scala.collection.immutable.HashMap

object BalanceParen {
    def main(args: Array[String]) {
        print(isBalanced("()"));
    }
    def isBalanced(input: String): Boolean = {
        val stack = new Stack[Char]
        val brace = HashMap('(' -> ')', '[' -> ']', '{' -> '}')

        input map (( ch: Char ) => {
            if( brace contains ch ) stack push ch
            else {
                if( brace.isEmpty )              return false
                if( brace.get(stack.pop) != ch ) return false
            }
        })
        return stack.isEmpty
    }
}

1 个答案:

答案 0 :(得分:0)

使用模块 async ,方法并行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)in 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

祝你好运)