티스토리 뷰
async
//do network request in 10 sec...
function getUser() {
setTimeout(() => {
return "espania";
}, 1000);
}
const user = getUser();
console.log("user : ", user); //undefined 출력
데이터를 받아오기 전에, 'console.log(user)' 함수를 호출 하므로 undefined가 출력된다.
이 때 call back 함수 나 Promise 객체를 사용하게되면, 비동기로 서버에서 받은 데이터를 처리할 수 있다.
//call back function
function getUser2(cb) {
setTimeout(() => {
cb("espania");
}, 1000);
}
getUser2((res) => {
const user2 = res;
console.log("user2 : ", user2); //espania 출력
});
//Promise function
function getUser3() {
return new Promise((resolve) => {
setTimeout(() => {
resolve("espania");
}, 1000);
});
}
getUser3().then((res) => {
const user3 = res;
console.log("user3 : ", user3); //espania 출력
});
앞에 방법들로 비동기 작업을 처리할 수 있지만 조금더 간편하게 비동기 작업을 처리할 수 있는 방법이 async 키워드를 이용하는 것이다.
//async
function delay(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}
async function getUser4() {
delay();
return "espania";
}
getUser4().then((res) => {
const user4 = res;
console.log("user4 : ", user4); //espania 출력
});
위와 같이, 함수 앞에 async 키워드를 붙이게 되면, 해당 함수는 Promise 객체를 반환한다.
await
비동기 처리 함수에 await 키워드를 붙이게 되면 동기적으로 수행한다.
//await
function delay(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}
async function getApple() {
await delay(3000); //3초 기다리고 실행
return "apple";
}
다음과 같이 비동기 함수를 처리하는 'delay' 함수 앞에 await 을 붙이게 되면 해당 함수를 동기적으로 처리한다.
Promise를 async로 변경하기!!
getApple 과 getBanana 라는 함수가 있을 때,
async function getApple() {
await delay(3000);
return "apple";
}
async function getBanana() {
await delay(3000);
return "banana";
}
Promise 객체를 다음과 같이 중첩적으로 체이닝을 하게되면 코드가 복잡해지고 가독성이 떨어진다.
function pickFruits() {
return getApple().then((apple) => {
return getBanana().then((banana) => {
return `${apple} + ${banana}`;
});
});
}
pickFruits().then(console.log);
따라서 async를 사용하면 로직을 좀 더 간단하게 만들 수 있다.
pickFruits().then(console.log);
async function pickFruits2() {
const apple = await getApple();
const banana = await getBanana();
return `${apple} + ${banana}`;
}
pickFruits2().then(console.log);
참고
[javascript] 비동기 작업 / Promise
Promise 란??? Promise는 비동기 처리를 위해 사용되는 하나의 객체이다. 콜백 함수를 사용하여 비동기 작업을 처리할 때 콜백 지옥(CallBack Hell)으로 인한 단점을 보완할 수 있다. Promise 생성 Promise는 ES
espania.tistory.com
https://espania.tistory.com/338
[javascript] 비동기 작업
비동기 작업 - 비동기적 작업 : 싱글 스레드 방식을 이용하면서, 동기적 작업의 단점을 극복하기 위해 여러개의 작업을 동시에 실행 시키도록 하는 방식 - 논 블로킹 방식 : 하나의 작업이 스레드
espania.tistory.com
'JavaScript' 카테고리의 다른 글
| [javascript] API 호출/ fetch (0) | 2022.04.30 |
|---|---|
| [javascript] 비동기 작업 / await 병렬 처리 (0) | 2022.03.01 |
| [javascript] 비동기 작업 / Promise (0) | 2022.02.26 |
| [javascript] 비동기 작업 / 콜백 지옥(CallBackHell) (0) | 2022.02.26 |
| [javascript] 비동기 작업 / Call Back 함수란 무엇인가?? (0) | 2022.02.24 |