해당 기능을 비동기로 만들지 마십시오.

오늘은 Javascript 코드를 작성하기에 좋은 날입니다. ES2015와 매년 언어에 제공되는 최신 기능으로 인해 사용하기가 즐겁습니다. ES2017에서 Javascript는 비동기 코드를 처리하기 위한 보다 간결하고 표현적인 구문을 제공하는 Async/Await를 얻었습니다. Node의 최신 릴리스에서 사용할 수 있으며 Babel을 사용하여 브라우저를 대상으로 트랜스파일할 수 있습니다.

그러나 함수를 비동기로 표시한다고 해서 코드의 성능이 마술처럼 향상되는 것은 아닙니다. 대부분의 경우 다음과 같은 유형의 코드를 우연히 발견합니다.

async function saveUser(userData) {
  const user = await this.userRepository.saveUserInDatabase(userData);
  return user;
}


아, 또 그런 종류의 비동기 함수인가.

함수를 기다릴 때 일어나는 일.



키워드 await 를 사용하는 경우 Javascript는 함수 실행을 일시 중지하고 비동기 작업이 완료될 때까지 호출자에게 컨트롤을 반환합니다. 이전 예에서 우리의 saveUser 함수는 제어권을 되찾고 결과를 반환하기 위해 메서드 호출saveUserInDatabase(userData)에 의해 반환된 약속을 기다리면서 대기 상태를 유지합니다.



이제 모든 단일 함수를 비동기로 만든다고 상상해 보십시오. 모든 함수는 모든 개별 함수가 해결될 때까지 기다려야 합니다. 그런 다음 해당 함수는 해당 함수의 호출자에게 제어권을 돌려주기 위해 컨트롤을 다시 가져옵니다. 이 상황에서 노드 프로세스는 모든 기능의 실행 상태를 시작/중지하고 저장/복구해야 합니다. 이것은 실제로 코드의 성능을 떨어뜨립니다!

시스템에 여러 계층이 있고 각 계층은 다른 계층이 일시적으로 제어권을 획득하고 다시 돌려주기를 완료하기를 기다립니다. 콜스택은 다음과 같이 표시될 수 있습니다.



함수를 비동기화하기 위한 조언.



일반적으로 비동기 함수는 약속일 뿐입니다. 아직 계산되지 않은 미래 가치를 나타냅니다(진행 중인 이벤트로도 볼 수 있음). 값이 필요할 때까지 Promise의 계산을 가능한 한 많이 지연시키는 것이 좋습니다. 다음과 같은 경우 비동기 함수가 좋은 생각이라고 생각합니다.

  • 다른 비동기 함수의 값이 필요합니다. 예를 들어 결과를 래핑하고 도메인의 엔터티로 변환할 수 있도록 쿼리가 완료될 때까지 데이터베이스 계층에서 기다릴 수 있습니다.

  • 비동기 함수를 완료한 후 추가 단계를 수행해야 합니다. 예를 들어 사용자가 바로 이메일을 보내려면 사용자가 데이터베이스에 저장할 때까지 기다려도 됩니다. 대신 사용자 이메일을 상징하는 약속을 반환할 수 있습니다.

  • async function saveUser(userData) {
      const user = await this.userRepository.saveUserInDatabase(userData); // We need the user.
      return this.sendUserEmail(user); // this.sendUserEmail is another async function.
    }
    


  • 예외를 처리해야 합니다. 때때로 비동기 작업을 실행하고 싶지만 해당 계층 수준에서 궁극적인 실패에 대응해야 합니다. 예를 들어 실패 시 사용자 프로필 사진을 삭제해야 하는 경우 사용자를 생성할 때 데이터베이스 계층 실행을 기다릴 수 있습니다.
  • 코드를 더 표현력 있게 만듭니다. 성능과 더 깔끔한 코드 사이에서 절충해야 할 때가 있을 수 있습니다 :).

  • 마무리.



    Async/Await는 Javascript 세계에 도달한 최고의 기능 중 하나입니다. 비동기 작업을 표현하는 강력하고 표현적인 방법입니다. 이 모든 위대함에도 불구하고 과도하게 사용하면 성능과 가독성이 저하되고 복잡성이 생길 수 있습니다. 때로는 노력할 가치가 없는 복잡성입니다. 함수를 만들 때 가능한 한 빨리 함수 호출자에게 제어권을 돌려주는 것이 좋습니다.

    행복한 코딩!

    좋은 웹페이지 즐겨찾기