2017-02-15 94 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