child_process在执行命令后,stdout.on("data" 怎么样在遇到指定字符串或者条件时退出?
发布于 11 年前 作者 yakczh 8693 次预览 最后一次回复是 11 年前 来自
var iconv = require(‘iconv-lite’); var ls= require(‘child_process’).spawn(‘ping’, [‘www.baidu.com’]);
var MAX=2; var count=1;
ls.stdout.on(‘data’, function (data) { var buffer = new Buffer(data); var str = iconv.decode(buffer, ‘gbk’); console.log(count+’ stdout: ’ + str); count++
if( count > MAX ){
return;
}
});
这个return不起作用
9 回复
data事件每次触发都会调用回调函数,你加个return没有意义吧。
on(“xx” 的回调函数里面就没办法break吗?
@yakczh 你可以把if return条件写在回调函数的最前面来解决这个问题。
@syhd142 写到最前面就可以,这是什么原理?
@yakczh 回调函数每次data事件触发时还是会进去,每次count加1,直到满足条件就return了,后面的就不会执行了。
说明return在回调函数也是起作用的,我还以为回调函数有什么特殊的呢
在遇到某一个情况的时候这样把子进程干掉就可以了。具体你想用什么方式来结束进程基本上都是 kill 方法里面传数字或者字符串的信号给子进程。如果你要分行的话用
pipe多好:pipe 是管道,就是一边输出一边处理,不是全部输出完了,再处理,这就是你说的分行吧
@yakczh
是管道呀,不过我觉得用ondata事件来处理的话不如直接用pipe吧,可操作性也高一些 :p