이번에는 비동기 함수의 꽃, async
키워드에 대해 알아보도록 합시다.
자세한 사항은 꼭 MDN 공식문서 - async function을 참고해주시기 바랍니다.
const sing = async () {
return 'LA LA LA LA'
}
sing() // Promise {<fulfilled>: 'LA LA LA LA'}
async
함수는 항상 Promise
객체를 반환합니다. async
함수에 값을 return
한다면, Promise
의 상태가 연산이 성공적으로 완료되었다는 이행(fulfilled)
값으로 갖게 됩니다.
sing().then((data)=>{
console.log("PROMISE RESOLVED WITH:", data)
})
위의 Promise
를 활용했을 때와 같은 로직을 Async
로 매우 쉽게 구현할 수 있는 것입니다.
const sing = async () {
throw new Error('UH OH')
return 'LA LA LA LA'
}
sing() // Promise {<rejected>: Error: 'UH OH'}
throw
키워드는 return
과 반대로 rejected
값으로 갖게 됩니다. throw new Error('UH OH')
이처럼 Error
생성자를 만들거나 throw 'UH OH'
처럼 간단히 표현할 수도 있습니다.
위와 같은 Async
함수는 물론 return
값을 반환하기 전에 throw
로 던져버렸기 때문에 이행(fulfilled)
값은 반환되지 않습니다.
하지만, 이는 실제로 에러가 발생하기 때문에 이후에 어떤 함수도 실행되지 않습니다. 이를 해결하기 위한 방법은 추후에 알아보도록 합시다.
const login = async (username, password) => {
if (!username || !password) throw 'Missing Credentials'
if (password === 'corgifeetarecute') return 'WELCOME!'
throw 'Invalid Password'
}
login('todd', 'corgifeetarecute')
.then(msg => {
console.log("LOGGED IN!")
console.log(msg)
})
.catch(err => {
console.log("ERROR!")
console.log(err)
})