해당 기능을 비동기로 만들지 마십시오.
3885 단어 nodeasyncwebdevjavascript
그러나 함수를 비동기로 표시한다고 해서 코드의 성능이 마술처럼 향상되는 것은 아닙니다. 대부분의 경우 다음과 같은 유형의 코드를 우연히 발견합니다.
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 세계에 도달한 최고의 기능 중 하나입니다. 비동기 작업을 표현하는 강력하고 표현적인 방법입니다. 이 모든 위대함에도 불구하고 과도하게 사용하면 성능과 가독성이 저하되고 복잡성이 생길 수 있습니다. 때로는 노력할 가치가 없는 복잡성입니다. 함수를 만들 때 가능한 한 빨리 함수 호출자에게 제어권을 돌려주는 것이 좋습니다.
행복한 코딩!
Reference
이 문제에 관하여(해당 기능을 비동기로 만들지 마십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/clovis1122/dont-make-that-function-async-9m6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)