2017-12-22 10 views
1

그래서 항상 이점이 있는지 궁금해했습니다. 아래에 예제를 제공 할 것입니다. 약속에 싸여비동기 함수가 약속 함수와 동기화 함수에 랩 됨

비동기 기능 :

(async() => { 
    await new Promise((resolve, reject) => { 
     fs.writeFile(filePath, dataToWrite, (error) => { 
      if (error) { 
       reject(error); 
       return; 
      } 
      resolve(); 
     }); 
    }); 
})(); 

동기 기능 :

(() => { 
    fs.writeFileSync(filePath, dataToWrite); 
})(); 

나는 빛 독서 알고있는 유일한 방법은 동기 함수 호출 블록 프로세스가 완료 될 때까지이다. 예를 들어 api 엔드 포인트가있는 웹 서버는 동기 기능이 완료 될 때까지 이러한 요청을 처리 할 수 ​​없습니다. 이것은 약속에 싸여있는 비동기 함수에서도 마찬가지입니까? 두 사람 사이에 차이가 있다면 그렇게 설명 할 수 있습니까?

+1

비동기 함수 자체가 비 차단 약속을 반환합니다. – mehulmpt

+1

예제에서 아무 것도 기다리지 않는 코드가 없으므로 전혀 차이가 없습니다. 또한 IIFE로 포장하는 이유는 무엇입니까? – Bergi

+0

내가 잘못하지 않으면 writeFileSync가 차단되고 디스크/파일 시스템에 파일을 쓰는 작업이 완료 될 때까지 기다려야합니다. – Veve

답변

2

동기 함수 호출은 완료 될 때까지 프로세스를 차단합니다.

예.

약속으로 포장 된 비동기 함수의 경우에도 마찬가지입니까?

아니요, 이것이 비동기 처리의 핵심입니다.

await은 약속이 완료 될 때까지 특정 코드 async function의 코드 실행을 "차단"만하지만 나머지는 계속 실행됩니다.

+0

을 사용하는 것이 좋습니다. 비동기 함수를 래핑하는 데 유용합니다 기능을 실행하는 동안 응용 프로그램의 다른 부분이 차단되지 않기를 바란다면? (그냥 명확히하고 싶음) –

+0

약속을 지키는 것이 좋은 방법이지만 비 차단이라고하는 이유는 아닙니다. 그것은 비동기 함수 인'writeFileSync' 대신'writeFile'을 사용하는 것입니다. 약속과'async 함수 '는 콜백을 사용하는 것보다 결과를 쉽게 처리합니다. – Bergi