[Node.js] 동기(Sync) & 비동기(Async)

Asher Park·2022년 12월 13일
1
post-thumbnail

스파르타코딩클럽 내일배움캠프 Node.js 입문주차 강의를 들으며 공부한 것을 적은것입니다.

1. 동기

  • 먼저 실행된 코드의 결과가 나올때 까지 대기하는 것

2. 비동기

  • 실행된 순서와 관계 없이 결과가 나오는 것

3. Blocking Model

  • 코드의 실행이 끝나기 전까지 실행 제어권을 다른곳에 넘기지 않아 다른 작업을 하지 못하고 대기

4. Non-Blocking Model

  • 코드의 실행이 끝나지 않아도 실행 제어권을 다른곳에 넘겨 다음코드가 실행 될 수 있는 것

❓ 동기, 비동기와 다른점?

  • 제어권을 넘기면 (Non-Blocking) 다른 코드도 실행될 수 있으므로 비동기 처리가 가능
  • 제어권을 넘기지 않으면 (Blocking) 비동기 처리가 가능한 환경이어도 비동기 처리가 불가능

프로미스(Promise)

  • 비동기 처리동기로 처리할 수 있도록 돕는 객체 유형
  • Promise 생성자 인터페이스
    executor 에는 함수만 올 수 있으며 인자로 resolve, reject 가 들어간다
  • executor 는 실행 함수, Promise가 만들어질 때 자동으로 실행
new Promise(executor);

new Promise((resorve, reject) => {
	// 명령문
	// 정상적이면 resorve, 실패했을때 reject
});
  • Promise의 3가지 상태
  1. 대기 : 이행하거나 거부되지 않은 초기 상태
  2. 이행 : 연산이 성공적으로 완료
  3. 거부 : 연산이 실패
  • Promise.then
    resolve 가 실행되면 실행
const resolvePromise = new Promise((resorve, reject) => {
  
	setTimeout(() => {
      console.log('First');
      resolve('Resolve!');
    }, 1000);
  
});

resolvePromise.then((data) => {
  console.log('Middle');
  console.log('Last');
  console.log(data);
})
  1. 1초 후에 'First' 출력
  2. resolve를 실행할 때 'Resolve!' 를 data에 넣어서 실행
  3. 'Middle'
  4. 'Last'
  5. 'Resolve!'
  • Promise.catch
    Promise 안에서 에러가 throw 되거나 reject 가 실행되면 catch 메서드에 작성한 함수가 실행
const errorPromise = new Promise((resolve, reject) => {
  setTimeout(() => {
          console.log('First');
                reject('Error!!');
        }, 1000);
});

errorPromise.then(() => {
        console.log('Middle');
        console.log('Last');
}).catch((error) => {
        console.log('에러 발생!', error);
});

비동기 함수 (Async Function)

  • 비동기 함수는 일반 함수나 화살표 함수와 비슷하지만 두가지가 다르다
  1. 비동기 함수의 결과 값은 항상 Promise 객체로 resolve 된다
  2. 비동기 함수 안에서만 await 연산자를 사용할 수 있다
profile
배움에는 끝이없다

0개의 댓글