개발/Javascript
async function과 Promise
종후
2020. 4. 26. 17:51
비동기 작업(function A) 호출 시 await 키워드를 사용하게 되면 function A를 호출하는 함수(function B)는
반드시 async 키워드를 붙여주어야 한다.
async function B () {
const result = await A()
}
단... 이렇게 await을 사용하기 위해선 function A가 Promise를 리턴하고 있어야 한다는 전제가 있다.
마찬가지로 function B를 다른 함수가 await을 이용하여 호출한다고 한다면
function B 는 Promise를 리턴하고 있어야 하는 것이다.
그래서 난 개발인생 내내 아래와 같은 짓을 해왔다.
async function B () {
const result = await A()
return Promise.resolve(result)
}
당연한 얘기지만 이렇게 하면 매우 잘 동작한다.
그러던 어느날... 회사에서 충격적인 코드를 보게 되었다.
async function B () {
const result = await A()
return result
}
띠용? 이거 에러 안나여??
그렇다. 에러 안난다. 그래서 난 찾아보았다. async에 대해... 그리고 오래 걸리지 않아 금방 알아내었다...
Asynchronous functions operate in a separate order than the rest of the code via the event loop, returning an implicit Promise as its result.
마지막을 잘 보자. 암시적으로 Promise 로 결과를 리턴한다.
이런 당연한걸 난 여태 몰랐다.
결론을 짓자면 아래 두 코드는 동일한 동작을 하게 된다.
이래서 근본이라는 것이 중요한 것이다. 근본없이 어깨너머로 어정쩡하게 배운거로 나대면 안된다.
나는 아직도 근본없는 개발자이다. 노력하자..