async function의 도입
정리
Promise : 아직 값을 반환하지 않는 객체 -> .then을 사용하여 값을 반환
async await : 프로미스사용을 더 간략하게 하기 위해 나왔기에 프로미스에 사용하는 것
async : 프로미스 객체를 감싸고 있는 함수 앞에 붙혀야 함.
await : then과 같은 역할로 프로미스 객체 앞에 붙히면 값을 반환함
Promise ~ then을 async await 로 축약해보자
// - async await 로 한번 더 축약 가능
function findAndSaveUser(Users){
Users.findOne({})
.then((user)=>{
user.name='zero';
return user.save();
})
.then((user)=>{
return Users.findOne({gender : "men"})
})
.then((user)=>{
생략
})
.catch((err)=>{
return err;
})
};
// 축약한 코드
async function findAndSaveUser(Users){
try {
let user = await Users.findOne({}) // 실행순서가 오른쪽에서 왼쪽
user.name = 'zero';
user = await user.save();
user = await Users.findOne({gender : "man"})
} catch (error) {
console.error(error)
}
};
async 함수에서 return한 것들 then or await로 받아야 함
// 임의의 프로미스 생성
const promise = new Promise(()=>{})
promise.then(()=>{})
// async await
async function main(){
const result = await promise;
}
// 탑레벨 await(async가 없어도 await만 사용가능)
const result = await promise;
// async 함수에서 return한 것들 then or await로 받아야 함
async function main(){
const result = await promise;
return "zerocho"
}
main().then((name)=>{})
// 또는
const main = await main()
for await or
node 10부터 지원
for await (변수 of 프로미스 배열)
const promise1 = Promise.resolve("성공");
const promise2 = Promise.reject("실패");
(async () => {
try {
for await (promise of [promise1, promise2]){
console.log(promise);
}
} catch (error) {
console.error(error);
}
})();