簡體   English   中英

在另一個函數中使用一個函數的值

[英]Use a value from one function in another function

我的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);
});

當我運行上面的代碼時,我得到了:

在9813ms中完成了jobRunId 818(601)teragen run 6,退出代碼未定義

與此相關的最大問題是您正在異步環境中運行。 這意味着盡管您可以通過這種方式進行操作,但不能保證您將在給定的時間對變量進行任何給定的賦值,除非,例如,在開始時就為其賦值一次。

簡短的答案是肯定的,它將按您期望的那樣工作。

長答案是,除非保證您在調用“ child.on('close'”之前至少有一個“ child.stdout.on('data'”調用),否則您的變量可能不會被更新。在異步環境中,這種代碼通常不是一個好主意,因為您不知道何時會發生什么。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM