Node.JS中child_process的execFile中的异步函数

时间:2015-07-14 17:34:06

标签: javascript node.js mongodb phantomjs casperjs

在node.js(casperJS脚本)文件中,模块execFile中的函数child_process用于运行访问Mongodb数据库集合的脚本mongoScript.js

execFile("node", 'mongoScript.js', null, function (err, stdout, stderr) {
    console.log("execFileSTDOUT:", stdout);
    console.log("execFileSTDERR:", JSON.stringify(stderr));
    finished = true;
});

其中mongoScript.js包含异步函数collection.find

var mongojs = require('mongojs')
var db = mongojs()
var collection = db.collection('myCollection')

collection.find({}, function(err, docs) {       
    console.log('done')
    db.close()
})

问题:collection.find更改打印done之前,似乎已退出脚本。我们如何让它等待collection.find完成运行?

2 个答案:

答案 0 :(得分:1)

正如documentation所说,args函数的execFile参数应该是一个数组:

execFile("node", ['mongoScript.js'], null, function (err, stdout, stderr) {
    console.log("execFileSTDOUT:", stdout);
    console.log("execFileSTDERR:", JSON.stringify(stderr));
    finished = true;
});

如果它不是数组,JavaScript可能会尝试将字符串拆分为数组,在这种情况下实际调用node m o n g o ...

答案 1 :(得分:0)

试试这个

exec("node mongoScript.js"+childArgs,function (err, stdout, stderr) {
    console.log("execFileSTDOUT:", stdout);
    console.log("execFileSTDERR:", JSON.stringify(stderr));
    finished = true;
});