Javascript
Promise, async / await [node.js 교과서]
muyeon
2023. 4. 8. 17:56
본 게시글은 node.js 교과서 강의를 듣고 정리한 글입니다.
- 콜백 헬이라고 불리는 지저분한 자바스크립트 코드의 해결책이다.
- Promise : 내용이 실행은 되었지만 결과를 아직 반환하지 않은 객체
- then 을 붙이면 결과를 반환한다.
- 실행이 완료되지 않았으면 완료된 후에 then 의 내부함수가 실행된다.
const condition = true;
const promise = new Promise((resulve, reject) ⇒ {
if(condition) {
resolve(’성공’);
} else {
reject(’실패’);
}
});
promise.then((message) ⇒ {
console.log(message);
})
.catch((err) ⇒ {
console.log(err);
}
- Resolve (성공 리턴값 ) -> then 으로 연결
- Reject (실패 리턴값) -> catch 로 연결
- Finally 부분은 무조건 실행됨
- 성공했든 실패했든 그 값을 계속 프로미스가 들고 있다가 나중에 프로미스에다가 then 이나 catch 를 붙여서 받을 수 있다.
- 코드를 분리할 수 있냐 없냐 가 가장 큰 차이이다.
Promise.all(배열) : 여러개의 프로미스를 동시에 실행
- 하나라도 실패하면 catch 로 간다.
- allSettled 로 실패한 것만 추려낼 수 있다.
async / await
async function findAndSaveUser(Users){
let User = await Users.findOne({});
[user.name](http://user.name) = ‘zero’;
user = await user.save();
user = await Users.findOne({gender: ‘m’});
//생략
}
- 변수 = await 프로미스; 인 경우 프로미스가 resolve 된 값이 변수에 저장
- 변수 await 값; 인 경우 그 값이 변수에 저장
- await 이 then 역할을 한다고 보면된다.
- async 함수에서 리턴한 것들은 무조건 then 이나 await 으로 받아야 한다.
for await ( 변수 of 프로미스 배열 )
const promise1 = Promise.resolve(’성공1’);
const promise2= Promise.resolve(’성공2’);
(async () ⇒ {
for await (promise of [promise1, promise2]) {
console.log(promise);
}
})();
- resulve 된 프로미스가 변수에 담겨 나온다.
- await 을 사용하기 때문에 async 함수 안에서 해야함