티스토리 뷰
비동기 작업(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 로 결과를 리턴한다.
이런 당연한걸 난 여태 몰랐다.
결론을 짓자면 아래 두 코드는 동일한 동작을 하게 된다.
이래서 근본이라는 것이 중요한 것이다. 근본없이 어깨너머로 어정쩡하게 배운거로 나대면 안된다.
나는 아직도 근본없는 개발자이다. 노력하자..
'개발 > Javascript' 카테고리의 다른 글
Vue Test Utils 에서 mount 와 shallowMount 의 차이 (0) | 2020.06.15 |
---|---|
Vue 에서 배열 및 오브젝트의 변경 감지 (0) | 2020.05.02 |
javascript 의 Concurrency model 과 Event Loop (0) | 2020.02.01 |
callback function (콜백함수)를 Promise 로 변환 (2) | 2019.12.07 |
javascript 자주쓰는 Array 메소드 2편(some, every, filter) (0) | 2019.08.07 |
- Total
- Today
- Yesterday
- 근본설
- 테스트코드
- KCD2019
- promise
- await
- es6
- CommonJs
- 프로미스
- javascript
- 인텔리제이
- 자바스크립트
- 모듈시스템
- 야누자이
- KCD
- 빌더패턴
- springboot
- 근본
- vue
- nuxtjs
- nuxt
- Builder
- intellij
- 이벤트루프
- vue.js
- 자바스크립트 엔진
- javascript engine
- 스프링부트
- event loop
- vuejs
- jest
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |