promise위에 적용됨
코드를 깔끔하게 해줌
2개의 키워드
async
await
async 함수는 항상 promise 객체를 리턴
만약 async 함수가 값을 리턴한다면 그 promise 객체는 값으로 resolved된 것
만약 async 함수가 예외처리를 한다면 그 객체는 rejected된 것
함수를 선언할 때 async 키워드를 앞에 사용하면 비동기 함수가 된다.
hello와 hello2 모두 return값이 없기 때문에 undefined를 return 예상
function hello (){
}
console.log(hello()); //undefined
async function hello2(){
}
console.log(hello2()); // Promise { undefined }
hello()는 undefined를 리턴해준데 반해 hello2()는 promise객체를 리턴해줬다
물론 return 값이 없어 내부의 값은 undefined
async function hello2(){
return 3;
}
console.log(hello2()); // Promise { 3 }
//화살표 함수로도 만들 수 있다.
const hello3 = async ()=>{ }
console.log(hello3())
const login = async (username, password) => {
if (!username || !password) throw "사용자 정보를 입력하세요";
if (password === "hello") return "welcome";
throw "비밀번호가 틀렸어요";
};
login("asdfasdf", "hello")
.then((data) => {
//then의 콜백함수의 data는 return 값
console.log(data); // 'welcome'
console.log("로그인 됐음");
})
.catch((err) => {
//비밀번호가 없다면 "사용자 정보를 입력하세요" 있지만 틀리다면 비밀번호가 틀렸어요"
console.log(err);
});
await 키워드는 sync로 선언된 함수 내부에서만 사용이 가능하다
await는 함수의 실행을 멈춘다 , promise가 resolved될 때까지
let rainbowFunction = async () => {
await bodyColorChanger('red')
await bodyColorChanger('blue')
await bodyColorChanger('yellow')
await bodyColorChanger('red')
await bodyColorChanger('red')
await bodyColorChanger('red')
await bodyColorChanger('red')
};
rainbowFunction();