비동기처리 및 Promise

승훈·2020년 10월 18일
0

NodeJS란 ?
비동기 이벤트 기반 주도 , JavaScript 런타임으로써, Nodejs는 확장성 있는 네트워크 애플리케을 만들수 있는 언어.
Chrome V8엔진 기반의 이벤트 기반( Event-driven ) , 논-블로킹 I/O ( Non-Blocking) 패러다임을 채택한 언어

  • 특징
  1. 이벤트 기반 ( Event-Driven) - 이벤트 루프 동작원리
  2. 논블로킹 I/O ( Non-Blocking I/O)
  3. 싱글 스레드
  • 자바스크립트는 싱글스레드 기반에서 콜백이 실행될수 있는 이유는
    Web환경에서 스레드를 제공해주는api환경을 제공해준다.
    ( ex> Dom(Documnet), Ajax, setTimeOut )
    ==> 비동기 함수들..
    Nodejs :논/블로킹기반의 싱글스레드로 동작하고 있다.
  • 논-블록킹은 이전 작업이 완료될때 까지, 기다리면서 멈추지 않고, 다음작업이 지연되지 않게 동작하는 패러다임이다
    아래는 Non-Blocking을 채택한 싱글스레드 기반의 예시다.

    NonBlocking 싱글스레드로 아래의 멀티스레드 (점원여러명)와 비슷하게 처리할 수 있다.

> Javascript Runtime

비동기(Asynchronous)

-> 요청한 그 자리에서 결과가 주어지지 않음
-> 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다.
< 동기와 비동기 프로세스 내부 동작 흐름 >

> 비동기적으로 동작하는 형태

특정 프로그램이 비동기적으로 동작하는 경우는 기본적으로 3가지의 경우 존재

  • Callback
  • Promise (async + await)
  • Event

Promise

  • Promise 개념
    - Promise 객체는 ES6(= ES2015) 버전에 추가.
    - Promise 객체는 이름 그대로 '어떠한 작업을 수행할 것을 약속하고 그 작업의 진행 상태 및 결과값을 저장하고 있는' 객체를 의미한다.
    그 작업이라는 것은 Promise 객체가 생성된 직후에 바로 실행이 되는데, 이는 결과값을 얻을 때까지 기다리는 동기적 작업일 수도 있고
    결과값을 얻을 때까지 기다리지 않고 다른 작업을 수행할 수 있는 비동기 작업일 수도 있다.
    그 작업의 진행 상태에 따라 Promise 객체는 다음과 같이 세 가지 상태 중 하나에 놓이게 된다. Promise 객체를 생성한 직후의 초기 상태는 Pending 상태이다.
    Promise가 코드를 동기적으로 만들수 있게 하더라도 내부적으로는 비 동기로 동작
    Pending 상태 : 실패(reject)했을 때의 상태로, onRejected가 호출된다.
    Fulfilled 상태 : 성공(resolve)했을 때의 상태로, onFulfilled가 호출된다.
    Rejected 상태 : 성공도 실패도 아닌 상태로, Promise 객체가 생성된 초기 상태
     
  • Promise 사용목적
    javascript에서 콜백이 중첩 되는 경우 (= 콜백 지옥)
    비동기 작업들을 컨트롤 수월
    코드 가독성 향상
    내부 예외처리 구조
  • Promise 사용법
    Promise 객체의 생성 : 생성자에 전달하는 함수는 인자로 resolve() 함수와 reject() 함수를 전달받으며,
    Promise 객체가 생성된 직후에 즉시 실행된다. 이 함수 안에 정의되는 로직이 곧 해당 Promise 객체가 수행하기로 약속한 작업에 해당하는 것이며,
    일반적으로는 setTimeout() 함수나 ajax 요청과 같이 비동기적으로 실행되는 코드가 이곳에 위치한다.
    만약 그 작업이 성공적으로 이행되었다면 이행 결과값을 인자로 넘기며 resolve() 함수를 호출해야 하고,
    그렇지 않다면 거부 이유를 인자로 넘기며 reject() 함수를 호출해야 한다.
    then() 함수와 catch() 함수 : then(onFulfillment, onRejection) 혹은 catch(onRejection) 함수의 호출에 의해 등록되는 콜백 함수들의 목록을 의미한다.
    new Promise -- return new Promise / new Promise

    Promise.resolve- 만일 Promise 내부에 비동기 함수가 호출되면 값을 잃어버림.

    Promise.all - Promise 객체를 배열로 입력받고, 모든 객체의 상태가 Fulfilled 상태가 되면 등록한 .then 메소드가 호출/ 차례대로 실행되지 않고 동시에 실행

    Promise.race - 전달된 Promise 객체 배열 중 하나만 완료되면 then 메소드를 호출

    Promise Chain - then, catch 시 새로운 Promise 객체 반환

  • Promise 예제 코드
    Promise 객체 생성



    Promise 객체 생성(Return 문 없이 즉시 실행 후 생성)

Promise.all

Promise 예제 흐름도


참조: https://namjackson.tistory.com/30, https://it-eldorado.tistory.com/89, https://programmingsummaries.tistory.com/325

0개의 댓글