2017-02-15 1 views
0

일부 개발자의 경우 node.js execFileSync 함수가 비동기로 실행되고 가 아닌 동기식으로 문제가 발생합니다. 우리는 이것이 문제가있는 기계와 원인을 찾을 수 없었던 기계 사이의 환경 적 차이에 기인한다고 생각합니다. 이전에 경험 한 사람이 있습니까?execFileSync asyncronously

다음은 간단한 예입니다. 이 코드 블록에 대한 호출이 여러 번 있습니다. 실행 사이에 정리 작업을 수행하기 위해 외부 스크립트를 호출해야하기 때문에 코드가 스크립트가 완료 될 때까지 기다리지 않고 계속해서 스크립트를 실행할 수 있습니다. 연속적으로가 아니라 한 번에 여러 번 실행됩니다.

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

* 동기 * 메서드에 콜백을 전달하는 이유는 무엇입니까? – 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