Promise객체의 메소드들 & 비동기 실행

삶은달걀·2023년 3월 8일
0

all

여러 Promise 객체의 작업 성공 결과를 기다렸다가 모두 한 번에 취합하기 위해서 사용(하나의 Promise 객체라도 rejected 상태가 되면 전체 작업이 실패한 것으로 간주)

any

여러 Promise 객체들 중 가장 먼저 fulfilled 상태가 된 Promise 객체의 상태와 결과를 반환(모든 Promise가 rejected 되면 AggregateError라는 에러를 작업 실패 정보로 갖고 rejected 상태가 됨)

race

가장 먼저 fulfilled 상태 또는 rejected 상태가 된Promise 객체와 동일한 상태와 결과를 반환

allSettled

배열 내의 모든 Promise 객체가 fulfilled 또는 rejected 상태가 되기까지 기다리고 pending 상태의 객체가 하나도 없을 때 전체 상태값을 fulfilled시키고 작업 결과를 반환

비동기 실행의 정의

  • 특정 작업이 시작되고, 그 작업이 모두 완료되기 전에 바로 다음 코드가 실행되는 방식의 실행(나머지 작업은 나중에 콜백을 통해 수행)
  • 특정 처리를 나중으로 미루는 방식의 실행
  • 콜백을 등록해두고, 추후에 특정 조건이 만족되면 그 콜백으로 나머지 작업을 수행하는 방식의 실행

비동기 실행 문법

  1. 파라미터로 콜백을 전달하는 형태(전통적인 비동기 실행 함수)
  • ex) setTimeout, setInterval, addEventListener 등
setTimeout(() => {
  console.log('asynchronously executed');
}, 2000);

button.addEventListener('click', (event) => { console.log('You Clicked'); });

콜백 헬을 야기함.

  1. Promise
  • ex) fetch
function readFile_promisified(filename) {
  const p = new Promise((resolve, reject) => {
    fs.readFile(filename, 'utf8', (error, data) => {
      if (error) {
        reject(error); // 에러 발생 시 -> rejected
      } else {
        resolve(data); // 파일 내용 읽기 완료 -> fulfilled
      }
    });
  });
  return p;
}

try, catch, finally 사용 가능. 한 번 fulfilled/reject 상태가 되고나면 그 상태와 결과가 다시는 바뀌지 않음.

  1. async/await 구문
async function fetchAndPrint() {
  try {
    const response = await fetch('https://www.google.www');
    const result = await response.text();
    console.log(result);
  } catch(error) {
    console.log(error);
  } finally {
    console.log('exit');
  }
}

fetchAndPrint();

async 함수 안의 내용이 순차적으로 실행되다가도, await 문을 만나면 await 바로 뒤의 코드를 실행해두고 일단 함수 바깥으로 코드 흐름을 변경. await는 async 함수 안에서만 사용할 수 있고, 코드의 top-level에서는 사용될 수 없음.

0개의 댓글