프로그래밍/Node.js

[Node.js 강의 시리즈] 15강 - 프로미스 (Promise)

월횽 2024. 7. 12. 06:30
728x90
반응형
SMALL

프로미스(Promise)의 개념과 사용법을 이해하고, then, catch, finally 메서드를 활용한 비동기 코드 작성법을 학습한다.

 

 

 

 

 

1. 프로미스(Promise)란?

 

프로미스의 개념

· 프로미스는 비동기 작업의 성공 또는 실패를 나타내는 객체다.
· 비동기 작업의 결과를 다루는 방법으로, 콜백 함수의 대안으로 사용된다.
· 프로미스는 세 가지 상태를 가진다.
     · Pending(대기): 초기 상태, 이행도 거부도 되지 않은 상태.
     · Fulfilled(이행): 작업이 성공적으로 완료된 상태.
     · Rejected(거부): 작업이 실패한 상태.

728x90

프로미스 생성

· 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. 프로미스 체이닝

SMALL

프로미스 체이닝이란?

· 프로미스 체이닝은 여러 비동기 작업을 순차적으로 실행할 때 사용된다.
· 각 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');
  });

 

 

- 이전 수업 목록

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
LIST