async 와 await 없이 비동기를 처리. 2017년
promise 의 then 2015년
// then 은 resolve 되면 실행된다.
function a() {
return new Promise((resolve) => {
setTimeout(() => {
console.log('A')
resolve()
}, 1000);
})
}
function b() {
return new Promise((resolve) => {
setTimeout(() => {
console.log('B')
resolve()
}, 1000);
})
}
function c() {
return new Promise((resolve) => {
setTimeout(() => {
console.log('C')
resolve()
}, 1000);
})
}
function test() {
a().then(() => {
b().then(() => {
c()
})
})
}
test()
// **콜백지옥과 매우 유사하다!!**
// ****test를 약간 개선 해 보면
// 화살표 함수 내부에서 별다른 로직 없이 단일코드가 return 코드와 사용되면
// 중괄호와 return 생략
function test() {
a()
.then(() => b())
.then(() => c())
}
// catch 는 reject 되면 실행된다.
// finally 는 resolve 되던 reject 되던 항상 실행된다.
function a(number) {
return new Promise((resolve, reject) => {
if(number > 4) {
reject('pass Error msg!')
}
setTimeout(() => {
console.log('A')
resolve('pass msg!')
}, 1000);
})
}
function test() {
a(2)
.then((msg) => {
console.log('Resolve : ', msg)
})
.catch((msg) => {
console.log('Reject : ' , msg)
})
.finally(() => {
console.log('Allways')
})
}
test()
// Reject : pass Error msg!
// Allways
// A
===========================================================================
위의 test 를 async 를 사용해서 해보자. try, catch 문 사용
async function test() {
try {
const res = await a(2)
console.log(res)
} catch(error) {
console.log(error)
} finally {
console.log('Allways!')
}
}