javascript, jQuery & Node.js/Node.js 사용전 자바스크립트
async/await 사용하기 for await of 문법 / ES2017 & ES2018 - 08
yy_dd2
2022. 12. 8. 13:38
반응형
ES2017 문법 노드 7.6부터 지원 -> async/await 사용
ES2018 문법 노드10버전 -> async/await 안에 for문을 사용하는 것
async/await 문법은 프로미스를 사용한 코드를 더 깔끔하게 사용할 수 있게 해준다
// .then .catch
function findAndSaveUser(Users) {
Users.findOne({})
.then((user)=>{
user.name = 'zero';
return user.save();
})
.then((user)=>{
return Users.findOne({gender:'m'});
})
.then((user)=>{
//...
})
.catch(err =>{
console.log(err);
})
}
// async/await으로 변경
async function findAndSaveUser(Users){
let user = await Users.findOne({});
user.name = 'zero';
user = await user.save();
user = await user.findOne({ gender : 'm'});
}
// 이렇게 변경이 가능하다 위 코드는 reject가 없어서 추가 작업으로 try catch로 감싸기
async function findAndSaveUser(Users){
try{
let user = await Users.findOne({});
user.name = 'zero';
user = await user.save();
user = await user.findOne({ gender : 'm'});
}
catch(err){
console.log(err);
}
}
위에 두 코드는 promise를 async/await으로 변경한 내용
화살표 함수도 async 사용이 가능하다
// 화살표 함수도 async 와 같이 사용 가능하다
const findAndSaveUser2 = async (Users) => {
try{
let user = await Users.findOne({});
user.name = 'zero';
user = await user.save();
user = await user.findOne({ gender : 'm'});
}
catch(err){
console.log(err);
}
}
async/await 을 for문과 같이 사용하기
for await of 문
// async/await 안에 for문을 사용하는 것
// for await of 문으로 프로미스 배열을 순회하는 내용
const promise1 = Promise.resolve('성공1');
const promise2 = Promise.resolve('성공2');
(async () => {
for await (promise of [promise1, promise2]){
console.log(promise);
}
})
// async 함수의 반환값은 항상 Promise로 감싸지는데 실행 후 then을 붙이거나 또 다른 async 함수 안에서 await을 붙여 처리가 가능하다고 함 (아직 어려워서 잘 모르겠다 차차 하다보면 더 알 수 있을 듯 하다) 책 80p 참고 (노드js교과서)
반응형