2017-02-15 142 views
0

我们有一个奇怪的问题,其中对于某些开发人员,node.js execFileSync函数异步运行,并且NOT按照它应该的方式同步运行。我们认为这是由于存在问题的机器与不存在的机器之间的某些环境差异造成的,但我们无法找到原因。 有没有人曾经体验过这个?execFileSync异步运行

这是一个简单的例子。我们有多次调用这段代码,因为我们需要调用一些外部脚本来在运行之间执行一些清理工作,但是在这些机器上,代码不会等待脚本完成并返回,然后才能继续执行脚本最终连续多次运行而不是连续运行。

execFileSync(batchPath, {stdio:[0,1,2]}, function(error, stderr, stdout) { 
     console.log(stderr); 
     console.log(stdout); 
     if (error !== null) { 
      console.log('exec error: ', error); 
     } 
    }); 

感谢您对此有何看法。

+0

为什么你传递一个* synchronous *方法的回调? – mscdex

+0

这不是我的原始代码,但我不能说为什么这样做,我猜测它可能是尝试和处理不同的输出。 – Anto

+0

那么根据实际赋予'execFileSync'的值,你实际上可以使用'execFile',它是*异步的。 '* Sync'函数不接受回调函数,而是返回输出。 – mscdex

回答

0

查看的文档为execFileSync正确调用:

的参数是3:

  1. 命令(串)的命令参数
  2. 列表(阵列)
  3. 个选项(对象)

你传入:

  1. 命令(串)
  2. 选项(对象)
  3. 回调(函数)

execFileSync应该如何被调用并考虑你想要做什么。

如何调用一个同步(阻塞)函数来运行一个外部程序(根据定义,它只能在程序完成后才能执行其他任何操作),但是您希望在程序运行时与该程序进行通信(来自在外部程序运行时被阻塞的进程)。

+0

感谢您的回复@rsp。该代码正在用于运行Postman测试,然后调用外部脚本来重置正在存储在泊坞窗容器中的数据库,所以这就是为什么我们需要同步功能,以澄清当前代码在大多数外部环境中按预期工作只有少数人有我的问题。为了测试你的建议,我尝试了以下方法,但它仍然是异步运行的: var output = execFileSync(exePath,[testParam],{shell:true}); – Anto