Open eunzy38 opened 4 years ago
콜백 지옥 콜백함수를 익명 함수로 전달하는 과정이 반복되어 코드의 열여쓰기 수준이 감당하기 힘들 정도로 깊어지는 현상
동기적인 코드 현재 실행 중인 코드가 완료된 후에야 다음 코드를 실행하는 방식
비동기적인 코드 현재 실행 중인 코드의 완료 여부와 무관하게 즉시 다음크로드로 넘어 가는 방식
비동기 작업의 동기적 표현
promise
var addCoffee = function (name) {
return function (prevName) {
return new Promise(function (resolve) {
setTimeout(function (){
var newName = prevName ? (preName + ',' + name) : name;
console.log(newName);
resolve(newName);
}, 500);
});
};
};
addCoffee ('에스프레소')()
.then(addCoffee('아메리카노'))
.then(addCoffee('아메리카노2'))
.then(addCoffee('아메리카노3'));
new 연산자와 함께 호출한 Promise의 인자로 넘겨주는 콜백 함수는 호출할 때 바로 실행되지만 그 내부에 resolve 또는 reject 함수를 호출하는 구문이 있을 경우 둘 중 하나가 실행되기 전까지 다음 (then) 또는 오류 구문으로 넘어가지 않는다. 따라서 비동기 작업이 완료될 때 resolve 또는 reject를 호출하는 방법으로 비동기 작업의 동기적 표현이 가능하다.
Generator
var addCoffee = function(prevName, name) {
setTimeout(function (){
coffeeMaker.next(prevName ? prevName + ',' + name : name);
}, 500);
};
var coffeeGenerator = function* () {
var espresso = yield addCoffee ('', '에스프레소');
console.log(espresso);
var americano = yield addCoffee(espresso, '아메리카노');
console.log(americano);
}
var coffeeMaker = coffeeGenerator();
coffeeMaker.next();
'*' 이 Generator 함수이며 이를 실행하면 Iterator가 반환되는데, Iterator는 next라는 메서드를 갖고 있다. next 메서드를 호출하면 Generator 함수 내부에서 가장 먼저 등장하는 yield에서 함수 실행을 멈춘 후 이후 다시 next 메서드 호출하며 앞서 멈췄던 부분부터 실행.
Promise + Async/await 가독성이 뛰어나면서 작성법도 간단한 작성 법
var addCoffee = function (name) {
return new Promise(function (resolve) {
setTimeout(function (){
resolve(name);
}, 500);
});
};
var coffeeMaker = async function() {
var coffeeList ='';
var _addCoffee = async function(name) {
coffeeList += (coffeeList ? ',':'') + await addCoffee(name);
}
await _addCoffee('에스프레소');
console.log(coffeeList);
await _addCoffee('에스프레소2');
console.log(coffeeList);
};
coffeeMaker();
함수 앞에 async를 표기하고 함수 내부에서 실질적인 비동기 작업이 필요한 위치마다 await를 표기하는 것만으로 뒤의 내용을 promise로 자동 전환하고, 해당 내용이 resolve된 이후에야 다음으로 진행
5. 콜백 지옥과 비동기 제어
5. 콜백 지옥과 비동기 제어
비동기 작업을 동기적으로 보일 수 있도록 하는 장치
콜백 지옥은 콜백 함수를 익명 함수로 전달하는 과정이 반복되어 코드의 들여쓰기 기능이 감당하기 힘들정도로 깊어지는 현상이다.
비동기는 동기의 반대말으로서 동기적인 코드는 현재 실행중인 코드가 완료된 후에야 다음 코드를 실행하는 방식이다.
가독성 문제와 코드의 어색함을 해결하기 위한 가장 간단한 방법은 일명의 콜백 함수를 모두 기명함수로 전환하는 것이다
ES6 promise : new 연산자와 함께 호출한 promise의 인자로 넘겨주는 콜백 함수는 호출할 떄 바로 실행되지만 그 내부에 resolve 또는 reject 함수를 호출하는 구문이 있을 경우 둘중 하나가 실행되기 전까지는 다음 또는 오류 구문으로 넘어가지 않습니다.
ES6 Generator : Generator 함수를 실행하면 interator가 반환되는데 interator가 가지고 있는 next 메서드를 호출하면 Generator 함수 내부에서 가장 먼저 등장하는 yield에서 함수의 실행을 멈춘다
ES2017 async/await : 비동기 작업을 수행하고자 하는 함수 앞에 async를 표기하고 함수 내부에서 실질적인 비동기 작업이 필요한 위치마다 await를 표기하는 것만으로 뒤의 내용을 promise로 자동 전환하고, 해당 내용이 resolve된 이후에야 다음으로 진행합니다
콜백지옥
비동기적인 코드
ES6의 Promise를 이용한 방식
ES6의 Generator
ES2017의 async/await
ES6의 Promise를 이용한 방식
ES6의 Generator를 이용한 방식
ES2017의 async/await 도입
study 완료 후 체크 부탁드립니다.