프로미스(Promise)의 개념과 사용법을 이해하고, then, catch, finally 메서드를 활용한 비동기 코드 작성법을 학습한다.
1. 프로미스(Promise)란?
프로미스의 개념
· 프로미스는 비동기 작업의 성공 또는 실패를 나타내는 객체다.
· 비동기 작업의 결과를 다루는 방법으로, 콜백 함수의 대안으로 사용된다.
· 프로미스는 세 가지 상태를 가진다.
· Pending(대기): 초기 상태, 이행도 거부도 되지 않은 상태.
· Fulfilled(이행): 작업이 성공적으로 완료된 상태.
· Rejected(거부): 작업이 실패한 상태.
프로미스 생성
· new Promise 생성자를 사용하여 프로미스를 생성할 수 있다.
· 생성자는 두 개의 인수( resolve와 reject 함수를 갖는 콜백 함수)를 받는다.
const myPromise = new Promise((resolve, reject) => {
// 비동기 작업 수행
const success = true; // 작업 성공 여부
if (success) {
resolve('Operation was successful');
} else {
reject('Operation failed');
}
});
2. 프로미스 사용법
then 메서드
· then 메서드는 프로미스가 이행될 때 호출된다.
· then 메서드는 두 개의 콜백 함수(이행 시 호출될 함수, 거부 시 호출될 함수)를 받는다.
myPromise.then(
(result) => {
console.log('Success:', result);
},
(error) => {
console.error('Failure:', error);
}
);
catch 메서드
· catch 메서드는 프로미스가 거부될 때 호출된다.
· catch 메서드는 한 개의 콜백 함수(거부 시 호출될 함수)를 받는다.
myPromise.catch((error) => {
console.error('Error:', error);
});
finally 메서드
· finally 메서드는 프로미스의 성공 여부와 관계없이 항상 호출된다.
· finally 메서드는 어떤 인수도 받지 않는다.
myPromise.finally(() => {
console.log('Promise completed');
});
3. 프로미스 사용 예제
기본 사용 예제
· 간단한 프로미스를 생성하고 then, catch, finally 메서드를 사용하여 결과를 처리하는 예제.
const examplePromise = new Promise((resolve, reject) => {
const success = true; // 작업 성공 여부
setTimeout(() => {
if (success) {
resolve('Data loaded successfully');
} else {
reject('Data loading failed');
}
}, 2000);
});
examplePromise
.then((data) => {
console.log('Success:', data);
})
.catch((error) => {
console.error('Error:', error);
})
.finally(() => {
console.log('Operation complete');
});
실제 사용 예제: 파일 읽기
· Node.js의 fs 모듈을 프로미스 방식으로 사용하여 파일을 읽는 예제.
const fs = require('fs').promises;
fs.readFile('example.txt', 'utf8')
.then((data) => {
console.log('File content:', data);
})
.catch((error) => {
console.error('Error reading file:', error);
})
.finally(() => {
console.log('Read operation complete');
});
4. 프로미스 체이닝
프로미스 체이닝이란?
· 프로미스 체이닝은 여러 비동기 작업을 순차적으로 실행할 때 사용된다.
· 각 then 메서드는 다음 then 메서드로 프로미스를 반환하여 체이닝을 이어간다.
프로미스 체이닝 예제
const promise1 = new Promise((resolve) => {
setTimeout(() => resolve('Result 1'), 1000);
});
const promise2 = new Promise((resolve) => {
setTimeout(() => resolve('Result 2'), 1000);
});
promise1
.then((result1) => {
console.log(result1);
return promise2;
})
.then((result2) => {
console.log(result2);
})
.catch((error) => {
console.error('Error:', error);
})
.finally(() => {
console.log('All operations complete');
});
실습: 프로미스 사용하기
1. 기본 프로미스 생성
· 기본 프로미스를 생성하고 then, catch, finally 메서드를 사용하여 결과를 처리하세요.
예제
const myPromise = new Promise((resolve, reject) => {
const success = true;
setTimeout(() => {
if (success) {
resolve('Operation successful');
} else {
reject('Operation failed');
}
}, 1000);
});
myPromise
.then((result) => {
console.log('Success:', result);
})
.catch((error) => {
console.error('Error:', error);
})
.finally(() => {
console.log('Operation complete');
});
2. 프로미스 체이닝
· 여러 비동기 작업을 순차적으로 실행하고, 각 작업의 결과를 출력하세요.
예제
const task1 = new Promise((resolve) => {
setTimeout(() => resolve('Task 1 complete'), 1000);
});
const task2 = new Promise((resolve) => {
setTimeout(() => resolve('Task 2 complete'), 1000);
});
task1
.then((result1) => {
console.log(result1);
return task2;
})
.then((result2) => {
console.log(result2);
})
.catch((error) => {
console.error('Error:', error);
})
.finally(() => {
console.log('All tasks complete');
});
- 이전 수업 목록
'프로그래밍 > Node.js' 카테고리의 다른 글
[Node.js 강의 시리즈] 17강 - 비동기 처리 패턴 비교 (0) | 2024.07.16 |
---|---|
[Node.js 강의 시리즈] 16강 - async/await (0) | 2024.07.15 |
[Node.js 강의 시리즈] 14강 - 비동기 프로그래밍 심화 (0) | 2024.07.11 |
[Node.js 강의 시리즈] 13강 - 유용한 NPM 명령어 (0) | 2024.07.10 |
[Node.js 강의 시리즈] 12강 - package.json 파일 (0) | 2024.07.09 |