당근개발자
당근당근
당근개발자
전체 방문자
오늘
어제
  • 분류 전체보기 (157)
    • codepresoo (13)
    • JAVA (1)
    • JS (12)
    • 코딩 테스트 (7)
    • Spring (21)
    • 자료구조 (4)
    • HTTP (7)
    • JSP (36)
    • Etc (21)
    • RESTful (11)
    • React (1)
    • k8s (0)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • thymleaf#layout#fragment#thymleaf layout 적용안됌
  • 한 번에 끝내는 코딩테스트 369 Java편 초격차 패키지 Online.
  • dobule_linked_list#java
  • 코드프레소. #codepresso #대외활동 # IT교육 #코딩강의 #코딩 이러닝 # 무료 IT교육 #무료 코딩교육
  • HATEAOD
  • 한 번에 끝내는 코딩테스트 369 Java편 초격차 패키지 Online
  • 패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기
  • thymleaf error#template might not exist
  • stack#자료구조
  • #코드프레소. #codepresso #대외활동 # IT교육 #코딩강의 #코딩 이러닝 # 무료 IT교육 #무료 코딩교육
  • Primitive#Wrapper
  • queue#자료구조
  • 패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #수강하고있는강의명
  • 이
  • S
  • @JsonFilter#당근개발자

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
당근개발자

당근당근

JS

JavaScript promise

2021. 10. 13. 22:47

promise란?

 

프로미스는 자바스크립트 비동기 처리에 사용되는 객체이다. 비동기 처리란 특정 코드의 실행이 완료될 때까지 기다리지 않고,

다음코드를 먼저 수행한는 특성입니다.

 

promise는 주로 서버에서 받아온 데이터를 화면에 표시할 때 사용한다. 일반적으로 웹 애플리케이션을 구현할 때,

서버에서 데이터를 요청하고 받아오기 위해 아래와 같은 API를 사용한다.

 

$.get('url 주소' , function(response) {

    // .....

});

위 API가 실행되면 서버에다가  '데이터 하나 보내주세요' 라는 요청을 보낸다.

그런데 여기서 데이터를 받아오기도 전에 , 마치 데이터를 다 받아온 것 마냥 화면에 데이터를 표시하려고 하면,

오류가 발생하거나 빈 화면이 뜹니다. 이와 같은 문제점을 해겨하기 위한 방법 중 하나가 프로미스다.

 

-기초-

 

->기본코드

function getData(callbackFunc) {

$.get('url 주소/products/1', function(response) {

callbackFunc(response); // 서버에서 받은 데이터 response를 callbackFunc() 함수에 넘겨줌

});

}

getData(function(tableData) {

console.log(tableData); // $.get()의 response 값이 tableData에 전달됨

});

 

위 코드를 promise로 바꾸면 아래처럼 됩니다.

 

function getData(callback) {

// new Promise() 추가

return new Promise(function(resolve, reject) {

$.get('url 주소/products/1', function(response) {

// 데이터를 받으면 resolve() 호출

resolve(response);

});

});

}

// getData()의 실행이 끝나면 호출되는 then()

getData().then(function(tableData) {

// resolve()의 결과 값이 여기로 전달됨

console.log(tableData); // $.get()의 reponse 값이 tableData에 전달됨

});

 

-> Promise의 3가지 상태(states)

 

프로미스를 사용 할 때 알아야 하는 가장 기본적인 개념이 바로  상태입니다.

여기서 말하는 상태란 프로미스의 처리 과정을 의미한다.

new Promise()로 프로미스를 생성하고, 종료 될때까지 3가지 상태를 갖는다.

1) pending(대기) : 비동기 처리 로직이 아직 완료되지 않은 상태

2) Fulifiled(이행) : 비동기 처리가 완료되어 프로미스가 결과 값을 반환해준 상태

3) Rejected(실패) : 비동기 처리가 실패하거나 오류가 발생한 상태

 

Pending(대기)

먼저 아래와 같이 new Promise()를 호출하며 Pending 상태가 됩니다.

 

new Promise();

 

new Promise() 메서드를 호출 할 때, 콜백함수를 선언 할 수 있고, 콜백 함수의 인자는 resovle,reject 입니다.

 

new Promise(function(resolve, reject) {

// ...

});

 

Fulfilled(이행)

 

여기서 콜백 함수의 인자 resolve 를 아래와 같이 실행하면 이행(Fulfilled) 상태가 된다.

 

new Promise(function(resolve, reject) {

resolve();

});

 

그리고 이행 상태가 되면 아래와 같이 then() 을 이용하여 처리 결과 값을 받을 수 있다.

 

function getData(){

return new Promise(function(resolve , reject){

var data =100;

resolve(data);

 

});

}

// resolve() 결과 값 Data를 resolveData로 받음

getData.then(function(resolbeData){

console.log(resolvedData); // 100

});

 

Rejected(실패)

 

new Promise()로 프로미스 객체를 생성하면 콜백 함수 인자로 resolve와 reject를 사용 할 수있다고 했습니다.

여기서 reject를 아래와 같이 호출하면 실해(Rejected) 상태가 된다.

 

function getData(){

return new Promise(function(resolve,reject){

reject(new Error("Request is Failed"));

});

}

getData().then().catch(function(err){

console.log(err); //Error: Request is Failed

});

'JS' 카테고리의 다른 글

async / await  (0) 2021.10.15
콜백함수(callback)  (0) 2021.10.13
비동기 처리  (0) 2021.10.10
상수(constant), 리털럴(literal)  (0) 2021.10.08
Javascript 이벤트 전파 중단 메서드  (0) 2021.10.07
    'JS' 카테고리의 다른 글
    • async / await
    • 콜백함수(callback)
    • 비동기 처리
    • 상수(constant), 리털럴(literal)
    당근개발자
    당근개발자

    티스토리툴바