我的child.stderr.on()
和child.stderr.on()
都使用一个回调函数来返回一个持续时间值(它只是一个代表执行时间的数字,以毫秒为单位)。
我想在我的child.on()
中使用此功能。我想我可以在函数外声明一个变量,在我的函数中为它指定持续时间,然后在我的child.on()
中使用它。我在下面列出了我的功能。 child.stdout.on
与child.stdout.on
相同。可以这样做吗?
child.stdout.on('data', function(data, callback) {
getEventLog.getId(id, uuid, function(err, id, code, callback){
//if(err) return console.log(err)
console.log("ID: " + id);
getEventLog.getDuration(id, uuid, function(err, duration, callback){
jobRun.duration = duration;
})
});
});
child.on('close', function(code, duration) {
var logMessage =
"Completed jobRunId " + jobRun.id + " (" + jobRun.jobsId + ") " + jobRun.jobType +
" run " + jobRun.runNumber + " in " + jobRun.duration + " with exit code " + code;
jobLogger.info(logMessage + "<br />");
callback(jobRun.id);
});
当我运行上述内容时,我得到了这个:
已完成jobRunId 818(601)teragen在9813ms运行6,退出代码未定义
答案 0 :(得分:2)
最大可能的问题是您在异步环境中运行。这意味着虽然你可以这样做,但是不能保证你在给定的时间内对变量赋予任何给定的赋值,除非你在一开始就给它赋值一次。
简短的回答是肯定的,它会按照您的预期运作。
答案很长,除非你保证在你有一个“child.on('close'”调用之前至少有一个“child.stdout.on('data'”调用,否则你的变量可能不会更新(在异步环境中,这种代码通常不是一个好主意,因为你不知道什么时候会发生什么。)