setTimeout
,addEventListner
//0.5초 주기마다 커피 목록을 수집하고 출력
//각 콜백은 커피 이름을 전달하고 목록에 이름을 추가
//문제점 : 들여쓰기 ㄷㄷ, 값 전달의 순서가 아래 -> 위
setTimeout(function (name) {
var coffeeList = name;
console.log(coffeeList);
setTimeout(function (name) {
coffeeList += ', ' + name;
console.log(coffeeList);
setTimeout(function (name) {
coffeeList += ', ' + name;
console.log(coffeeList);
setTimeout(function (name) {
coffeeList += ', ' + name;
console.log(coffeeList);
}, 500, '카페라떼');
}, '카페모카');
}, '아메리카노');
}, '에스프레소');
콜백 함수를 익명 함수로 전달하는 과정이 반복되어 코드의 들여쓰기 수준이 헬 수준이다.
주로 이벤트 처리 및 서버 통신과 같은 비동기적 작업을 수행할 때 발생
뭐가 문제? 가독성, 수정도 어려움
이를 해결하기 위해 ES6에서 Promise객체
가 소개되었다.
Promise 객체
를 다룬다promise 객체
Promise
객체는 비동기 작업이 맞이할 미래의 완료 또는 실패와 그 결과 값을 나타낸다
promise 객체에 담기는 주요한 상태정보
promise
객체 핸들링then ~ catch
(ES6)//http://api.naver/com/weather/today 로 요청을 한다고 가정
axios.get('http://api.naver/com/weather/today')
.then(response => {
console.log('정상처리 되었습니다 : ' + response)
})
.catch(error => {
console.log('오류가 발생했습니다 : ' + error)
})
.finally(() => {
console.log('항상 실행되는 부분입니다')
})
async / await
(ES7)const getWeather = async()=> {
try {
const response = await.axios.get('http://api.naver/com/weather/today')
console.log('정상처리 되었습니다 : ' + response)
} catch (error) {
console.log('오류가 발생하였습니다 : ' + error)
}
}
await
가 있는 줄이 끝날 때 까지 밑으로 내려가지 않는다.