Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在另一个函数中使用一个函数的值_Node.js_Function_Variables - Fatal编程技术网

Node.js 在另一个函数中使用一个函数的值

Node.js 在另一个函数中使用一个函数的值,node.js,function,variables,Node.js,Function,Variables,我的child.stderr.on()和child.stderr.on()都使用一个回调函数,该函数返回一个持续时间值(它只是一个以毫秒为单位表示执行时间的数字) 我想在我的child.on()中使用此选项。我想我可以在函数之外声明一个变量,在函数中为它指定持续时间,然后在我的child.on()中使用它。我在下面列出了我的建议。child.stdout.on与child.stdout.on相同。这能做到吗 child.stdout.on('data', function(data, callb

我的
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);
});
child.stdout.on('data',函数(data,回调){
getEventLog.getId(id,uuid,函数(err,id,code,callback){
//if(err)返回console.log(err)
控制台日志(“ID:+ID”);
getEventLog.getDuration(id、uuid、函数(错误、持续时间、回调){
jobRun.duration=持续时间;
})
});
}); 
子.on('close',函数(代码,持续时间){
变量日志消息=
“完成的jobRunId”+jobRun.id+”(“+jobRun.jobsId+”)+jobRun.jobType+
“+jobRun.duration+”中的“run”+jobRun.runNumber+”,退出代码为“+code”;
jobLogger.info(logMessage+“
”); 回调(jobRun.id); });
当我运行上述程序时,我得到以下结果:

在9813ms内完成jobRunId 818(601)teragen运行6,退出代码未定义


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

简而言之,答案是肯定的,它会像你期望的那样工作


答案很长,除非保证在调用“child.on('close')之前至少有一个“child.stdout.on('data')”调用,否则您的变量可能不会更新。(在异步环境中,这种代码通常不是一个好主意,因为您不知道什么时候会发生。)最大的可能问题是,您正在异步环境中运行。这意味着,虽然您可以这样做,但无法保证在给定时间对变量进行任何给定赋值,除非您在一开始就为其赋值一次

简而言之,答案是肯定的,它会像你期望的那样工作


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

那个么,当你们尝试这个方法时会发生什么?你们到底观察到了什么?你们并没有真正描述你们在尝试这个方法时遇到了什么问题。输出添加到了问题中。那个么,当你们尝试这个方法时会发生什么?你们到底观察到了什么?你们并没有真正描述你们在尝试这个方法时遇到了什么问题。输出添加到了问题中。考虑到这一点,如何我会让它以一种更可靠的方式工作吗?取决于您的用例。我想我的主要问题是您是否期望一个或多个“child.stdout.on('data')”事件。如果您期望一个事件和child.close在该事件之后可靠地发生,我可能会设置它,以便它在调用它时将数据传递给child.close。如果模式更像这样:child.stdout.on('data')child.stdout.on('data')child.stdout.on('data')child.close()然后,您正在记录的持续时间变量将是最后一个出现的变量,因此您可能需要一个计数器,例如:“totalDuration+=duration”在我看来,您提出的问题似乎是一个架构问题,我想我没有足够的数据来回答。对不起……在重新阅读您的问题时,我怀疑这两个事件的调用顺序错误。getEventLog.getDuration是否可能在child.close之后完成?…如果是,那么您可能需要设置请记住,我如何使它以更可靠的方式工作?取决于您的用例。我想我的主要问题是,您是否希望有一个或多个“child.stdout.on('data')”事件。如果您期望一个事件和child.close在该事件之后可靠地发生,我可能会设置它,以便它在调用它时将数据传递给child.close。如果模式更像这样:child.stdout.on('data')child.stdout.on('data')child.stdout.on('data')child.close()然后,您正在记录的持续时间变量将是最后一个出现的变量,因此您可能需要一个计数器,例如:“totalDuration+=duration”在我看来,您提出的问题似乎是一个架构问题,我想我没有足够的数据来回答。对不起……在重新阅读您的问题时,我怀疑这两个事件的调用顺序错误。getEventLog.getDuration是否可能在child.close之后完成?…如果是,那么您可能需要设置将其设置为在事件日志之后才发生.close(或者在事件日志之后才进行日志记录)