NodeJS란 ?
비동기 이벤트 기반 주도 , JavaScript 런타임으로써, Nodejs는 확장성 있는 네트워크 애플리케을 만들수 있는 언어.
Chrome V8엔진 기반의 이벤트 기반( Event-driven ) , 논-블로킹 I/O ( Non-Blocking) 패러다임을 채택한 언어
- 특징
- 이벤트 기반 ( Event-Driven) - 이벤트 루프 동작원리
- 논블로킹 I/O ( Non-Blocking I/O)
- 싱글 스레드
- 자바스크립트는 싱글스레드 기반에서 콜백이 실행될수 있는 이유는
Web환경에서 스레드를 제공해주는api환경을 제공해준다.
( ex> Dom(Documnet), Ajax, setTimeOut )
==> 비동기 함수들..
Nodejs :논/블로킹기반의 싱글스레드로 동작하고 있다.
비동기(Asynchronous)
-> 요청한 그 자리에서 결과가 주어지지 않음
-> 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다.
< 동기와 비동기 프로세스 내부 동작 흐름 >
특정 프로그램이 비동기적으로 동작하는 경우는 기본적으로 3가지의 경우 존재
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