콜백 헬이라고 불리는 지저분한 자바스크립 코드의 해결책
- 프로미스 : 내용이 실행은 되었지만 결과를 아직 반환하지 않은 객체
- Then을 붙이면 결과를 반환합니다.
- 실행이 완료되지 않았으면 완료된 후에 Then 내부 함수가 실행됩니다.
- Resolve(성공리턴값) -> then 으로 연결
- Reject(실패리턴값) -> catch로 연결
- Finally 부분은 무조건 실행됩니다.
const condition = true; // true 면 resolve, false면 reject
const promise = new Promise((resolve, reject) => {
if (condition) {
resolve("성공");
} else {
reject("실패");
}
});
//다른 코드가 들어갈 수 있음
promise
.then((message) => {
console.log(message); // 성공(resolve)한 경우 실행
})
.catch((error) => {
console.error(error);
});
결과값
D:\code\node\lecture2>node test1.js
성공
promise.all(배열) : 여러 개의 프로미스를 동시에 실행
- 하나라도 실패하면 catch로 감
- allSettled로 실패한 것만 추려낼 수 있음
const promise1 = Promise.resolve("성공1");
const promise2 = Promise.resolve("성공2");
Promise.all([promise1, promise2])
.then((result) => {
console.log(result); // ['성공1','성공2'];
})
.catch((error) => {
console.error(error);
});
결과값
D:\code\node\lecture2>node test1.js
[ '성공1', '성공2' ]
Async/awit 으로 한 번 더 축약 가능
function findAndSaveUser(Users) {
Users.findOne({})
.then((user) => {
user.name = "gildong";
return user.save();
})
.then((user) => {
return Users.findOne({ gender: "m" });
})
.then((user) => {
//생략
});
}
Async function 의 도입
- 변수 = await 프로미스; 인 경우 프로미스가 resolve 된 값이 변수에 저장
- 변수 await 값; 인 경우 그 값이 변수에 저장
async function findAndSaveUser(Users){
let user = await Users.findOne({});
user.name = 'gildong';
user = await user.save();
user = await Users.findOne({gender : 'm'});
//생략
}
for await ( 변수 of 프로미스배열)
- resolve된 프로미스가 변수에 담겨 나옴
- await을 사용하기 때문에 async 함수 안에서 해야함
const promise1 = Promise.resolve("성공1");
const promise2 = Promise.resolve("성공2");
(async () => {
for await (promise of [promise1, promise2]) {
console.log(promise);
}
})();
결과값
D:\code\node\lecture2>node test1.js
성공1
성공2
'Javascript > Node' 카테고리의 다른 글
화살표함수 자바스크립트 arrow function (0) | 2024.11.01 |
---|---|
템플릿 문자열 객체 리터럴 (0) | 2024.10.31 |
var const let 자바스크립트 변수 상수 (0) | 2024.10.30 |
Node.js 다운로드 설치 최신버전 22버전 (0) | 2024.10.29 |
서버 노드 (0) | 2024.10.28 |