Promise & resolve

Category
스터디 노트
Status
Published
Tags
JavaScript
Promise
Resolve
Description
Published
Slug

1. Promise란?

 
  • Promise는 자바스크립트에서 비동기 작업을 처리하기 위한 객체.
  • 비동기 작업의 결과를 나타내는 객체.
 
  • 비동기 작업이 완료되면 Promise의 상태가 변하게 됨
  • 비동기 작업은 시간이 걸리는 작업(예: 데이터 fetching, 파일 읽기 등)을 의미
  • Promise는 주로 3가지 상태를 가짐
    • Pending (대기 중): 작업이 아직 완료되지 않은 상태.
    • Fulfilled (이행됨): 작업이 성공적으로 완료된 상태.
    • Rejected (거부됨): 작업이 실패한 상태.
 
let promise = new Promise((resolve, reject) => { // 비동기 작업을 수행 let success = true; // 성공 여부를 나타내는 변수 if (success) { resolve("작업 성공!"); // 성공 시 resolve 호출 } else { reject("작업 실패!"); // 실패 시 reject 호출 } });
  • 위 코드에서 new Promise(...)는 새로운 Promise 객체를 생성.
  • 비동기 작업이 성공하면 resolve를 호출하고, 실패하면 reject를 호출.
 

2. resolve란?

 
  • resolve는 Promise가 성공적으로 완료되었음을 나타내는 함수.
  • 이 함수를 호출하면 Promise의 상태가 "fulfilled"로 변경됨
promise.then((result) => { console.log(result); // "작업 성공!"이 출력됨 }).catch((error) => { console.log(error); // 작업이 실패한 경우 출력 });
  • then 메서드는 Promise가 이행되었을 때 실행될 코드를 정의. catch 메서드는 거부되었을 때 실행될 코드를 정의.
 
 

3. return Promise.resolve()

 
  • Promise.resolve(value)는 주어진 값을 가진 이행된 상태의 Promise를 생성하는 메서드
    • 즉, 이미 완료된 Promise를 만들고 싶을 때 사용
      → ”작업이 성공적으로 완료되었다"는 상태로 Promise를 반환
function getData() { return Promise.resolve("즉시 작업 완료!"); // 즉시 "즉시 작업 완료!"라는 값을 가진 Promise를 반환 } // 사용 getData().then(message => { console.log(message); // 콘솔에 "즉시 작업 완료!"가 출력됨 });
  • 이 코드는 즉시 "작업 성공!"이라는 메시지를 가진 Promise를 반환함
 

4. return new Promise((resolve) => {...})

 
  • new Promise((resolve) => {...})는 새로운 Promise 객체를 생성.
  • 여기서 resolve는 함수의 인자로 전달됨
  • 이 부분에서 new는 JavaScript에서 객체를 생성할 때 사용하는 키워드. 즉, 새로운 Promise 객체를 만들기 위해 new를 사용.
 
  • resolve는 내부에서 비동기 작업이 성공적으로 완료되었을 때 호출됨
return new Promise((resolve) => { // 비동기 작업 수행 setTimeout(() => { resolve("비동기 작업 완료!"); // 1초 후 성공적으로 작업 완료 }, 1000); });
  • 1초 후에 "비동기 작업 완료!"라는 메시지로 Promise를 이행함
 

5. 대기 목록에서의 resolve

  • 대기 목록에 추가되는 resolve는 나중에 호출될 함수를 나타냄. 즉, 프린터가 사용 가능해졌을 때 이 함수를 호출하여 대기 중인 작업을 완료함
return new Promise((resolve) => { this.queue.push(resolve); // 대기 목록에 resolve 함수를 추가 });
  • 나중에 release() 메서드에서 이 resolve를 호출하여 대기 중인 작업을 완료함