Nodejs Childexec为文件中的每一行执行命令,但等待第一个命令退出后再运行下一个命令

我正在使用nodejs与我所做的casperjs脚本进行通信。 首先我会告诉你我的Casperjs脚本是做什么的。 我已经用命令行input来设置它。 我运行这个命令

casperjs script.js "Inputdata1" "inputdata2" 

这个脚本然后执行并访问我的一个服务器提交input数据1和2。

然后等待服务器响应并根据脚本从我的服务器获得的结果将行权限到10个文本文件之一

这然后退出。 这casperjs脚本工作正常没有问题。

现在我正在构build一个nodejs脚本来反复运行casperjs脚本

我的nodejs脚本假设使用readline.js读取文本文件,然后对每行使用里面的数据执行Casperjs命令。

问题是我的脚本一次执行每个执行,并且我没有从casperjs的文本文件中得到任何结果

我需要我的nodejs脚本来执行第一行等待Casperjs退出,然后才移动到下一行并用Casperjs执行

而且我还需要真正的casperjs脚本像往常一样工作

这里是我的nodejs脚本 – 我一直在这个好几天尝试不同的代码不同的模块,但不能解决它,所以任何帮助是极大的赞赏

 var fs = require('fs'), sleep = require('sleep'), readline = require('readline'); var rd = readline.createInterface({ input: fs.createReadStream('file.txt'), output: process.stdout, terminal: false }); rd.on('line', function(line) { var exec = require('child_process').exec; var child = exec('casperjs check.js ' + line ); child.on('close', function(code) { console.log('closing code: ' + code); }); }); 

您正在寻找顺序循环。 也就是说,在完成之前执行下一步。

困难来临了,因为Node.js是asynchronous的,开箱即用的function非常less。

有两个选项。

recursioncallback

 var fs = require('fs'), sleep = require('sleep'), exec = require('child_process').exec, readline = require('readline'); var rd = readline.createInterface({ input: fs.createReadStream('file.txt'), output: process.stdout, terminal: false }); var lines = []; rd.on('line', function(line) { lines.push(line); }); rd.on('end', function() { var i=0; if(i < lines.length) { exec('casperjs check.js ' + lines[i], function execCallback(code) { console.log('closing code: ' + code); i++; if(i < lines.length) exec('casperjs check.js ' + lines[i], execCallback); }); } }); 

具有顺序支持的asynchronous库

有很多select,例如,让我们看看asynchronous。

 var fs = require('fs'), sleep = require('sleep'), exec = require('child_process').exec, async = require('async'), readline = require('readline'); var rd = readline.createInterface({ input: fs.createReadStream('file.txt'), output: process.stdout, terminal: false }); var q = async.queue(function (task, callback) { var child = exec('casperjs check.js ' + task.line ); child.on('close', function(code) { callback(code); }); }, 1); rd.on('line', function(line) { q.push({line: line}, function (code) { console.log('closing code: ' + code + line); JSON.stringify(); }); 

});

没有testing,所以你可能需要修复错别字。