앞선 아티클에서 살펴보았던 async/await 코드 예제를 조금 더 응용해 보겠습니다.
async function findAndSaveUser(Useres) {
try {
let user = await Useres.findOne({});
user.name = 'zero';
user = await user.save();
user = await Useres.findOne({ gender: 'm' });
// 생략
} catch (error) {
console.log(error);
}
}
위 코드에서 화살표 함수를 동일하게 적용하여 async와 같이 사용할수도 있습니다. 같은 코드에 화살표 함수를 적용해 보겠습니다.
const findAndSaveUser = async (Users) => {
try {
let user = await Useres.findOne({});
user.name = 'zero';
user = await user.save();
user = await Useres.findOne({ gender: 'm' });
// 생략
} catch (error) {
console.log(error);
}
};
async/await를 for문과 같이 사용하는 것도 가능합니다(노드 10 버전부터 지원하는 ES2018 문법). 우선 이전의 아티클에서 사용했던 예제를 다시 꺼내보겠습니다.
const promise1 = Promise.resolve('SUCCESS 1');
const promise2 = Promise.resolve('SUCCESS 2');
Promise.all( [promise1, promise2] )
.then( (result) => {
console.log(result); // SUCCESS 1, SUCCESS 2
})
.catch( (error) => {
console.error(error);
})
프로미스 두 개를 사용하는 경우입니다. 이때 Promise.all 또는 Promise.allSettled를 사용했었던 것을 기억하실 겁니다. 이것을 for문을 사용해 적용해 보겠습니다.
const promise1 = Promise.resolve('SUCCESS 1');
const promise2 = Promise.resolve('SUCCESS 2');
( async () => {
for await (promise of [promise1, promise2]){
console.log(promise);
}
} )();
위 예제에서는 for await of문을 이용해서 프로미스 배열을 반복적으로 사용하게 되었습니다. 여기서 async 함수의 리턴 값은 항상 Promise로 감싸지게 되므로 실행 후 then을 붙이거나 또다른 async 함수 내에서 await를 붙여 처리가 가능합니다.
async function findAndSaveUser(Users){
// 생략
}
findAndSaveUser().then(() => { /* 생략 */ });
// or
async function other(){
const result = await findAndSaveUser();
}
** 위 내용은 추후 학습하는 타이머 관련 모듈 사용법에서 다시 튀어나옵니다. 이해가 가지 않는다면 아래 아티클과 순환하여 읽어보도록 합시다.
'Programming > Node.js' 카테고리의 다른 글
2. Javascript ES2015 (9) - 널 병합/옵셔널 체이닝 [1/2] (0) | 2024.03.04 |
---|---|
2. Javascript ES2015 (8) - Map/Set (0) | 2024.03.03 |
2. Javascript ES2015 (7) - async/awiat [1/2] (0) | 2024.02.28 |
2. Javascript ES2015 (6) - 프로미스 [5/5] (0) | 2024.02.26 |
2. Javascript ES2015 (6) - 프로미스 [4/5] (0) | 2024.02.23 |