我的child.stderr.on()和child.stderr.on()都使用回调,回调返回一个持续时间值(它只是一个以ms表示执行时间的数字)。
我想在我的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在9813 in中运行6次,退出代码未定义
发布于 2018-01-30 01:37:34
最大的可能问题是您正在异步环境中运行。这意味着,虽然你可以这样做,但这并不能保证你会在给定的时间对你的变量进行任何给定的赋值,除非,例如,你在一开始就给它赋值一次。
简单地说,是的,它会像你期望的那样起作用。
很长的答案是,除非保证在“child.stdout.on(‘child.on’)调用之前至少有一个”child.on(‘data’)调用,否则您的变量可能不会被更新。(在异步环境中,这种代码通常不是一个好主意,因为您不知道什么时候会发生一些事情。)
https://stackoverflow.com/questions/48511650
复制相似问题