使用另一个函数中一个函数的值

时间:2018-01-29 23:25:59

标签: node.js function variables

我的child.stderr.on()child.stderr.on()都使用一个回调函数来返回一个持续时间值(它只是一个代表执行时间的数字,以毫秒为单位)。

我想在我的child.on()中使用此功能。我想我可以在函数外声明一个变量,在我的函数中为它指定持续时间,然后在我的child.on()中使用它。我在下面列出了我的功能。 child.stdout.onchild.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,退出代码未定义

1 个答案:

答案 0 :(得分:2)

最大可能的问题是您在异步环境中运行。这意味着虽然你可以这样做,但是不能保证你在给定的时间内对变量赋予任何给定的赋值,除非你在一开始就给它赋值一次。

简短的回答是肯定的,它会按照您的预期运作。

答案很长,除非你保证在你有一个“child.on('close'”调用之前至少有一个“child.stdout.on('data'”调用,否则你的变量可能不会更新(在异步环境中,这种代码通常不是一个好主意,因为你不知道什么时候会发生什么。)