在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
完成运行?
答案 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;
});