ES6 지식 정리(二)---Promise

3944 단어 학습 노트
일찍이 17년 초에 을 읽고 블로그에 필기(ES6표준입문) 필기를 했는데 업무에서도 쓸모가 있다.1년 후에 다시 이 지식들을 돌이켜 보면 처음 봤을 때와는 느낌이 완전히 다르다.많은 새로운 특성의 장점에 대해 더욱 구체적인 인식을 가지게 되었다.아직도 이해가 부족한 지식도 있기 때문에 여기서 다시 한 번 정리하고 기초를 다져야 한다.
참고 자료: 1.Promise 사용법 분석 2.Promise 객체의 의미 및 기본 사용법 3.Promise 소개

Promise의 개념


이른바 Promise란 쉽게 말하면 하나의 용기로 그 안에 미래에 끝날 사건(보통 비동기적인 조작)의 결과가 보존되어 있다.문법적으로 Promise는 비동기적인 조작에 대한 정보를 얻을 수 있는 대상이다.
Promise 객체에는 다음과 같은 두 가지 특성이 있습니다.(1) 대상의 상태가 외부의 영향을 받지 않는다.Promise 객체는 Pending(진행 중), Resolved(완료됨, 일명 Fulfilled) 및 Rejected(실패) 등 세 가지 비동기식 작업을 나타냅니다.비동기 조작의 결과만 현재 어떤 상태인지 결정할 수 있으며, 그 어떠한 다른 조작도 이 상태를 바꿀 수 없다.프로미스라는 이름의 유래이기도 하다. 영어로는'약속'이라는 뜻으로 다른 수단을 바꿀 수 없다는 뜻이다.(2) 일단 상태가 바뀌면 다시 변하지 않고 언제든지 이 결과를 얻을 수 있다.Pending에서 Resolved로 변경하고 Pending에서 Rejected로 변경하는 것은 Pending에서 Rejected로 변경할 수 있는 두 가지 방법뿐입니다.이 두 가지 상황이 발생하기만 하면 상태는 응고되고 더 이상 변하지 않으며 이 결과를 계속 유지할 것이다.변경이 발생하더라도 프로미스 대상에 리셋 함수를 추가하면 바로 이 결과를 얻을 수 있습니다.이것은 이벤트 (Event) 와 완전히 다르다. 이벤트의 특징은 그것을 놓치면 다시 감청하면 결과를 얻을 수 없다는 것이다.Promise 대상이 있으면 비동기 조작을 동기화 조작의 절차로 표현할 수 있어 겹겹이 끼워 넣은 리셋 함수를 피할 수 있다.이 밖에 Promise 대상은 통일된 인터페이스를 제공하여 비동기적인 조작을 제어하는 것을 더욱 쉽게 한다.

Promise 사용 방법


Promise 구조 함수에는 함수인 매개변수가 포함됩니다.이 함수에는 또 두 개의 매개 변수인 Resolve와 Reject가 있다.

var p = new Promise(function(resolve, reject){
    //       
    setTimeout(function(){
        console.log('    ');
        resolve('      ');
    }, 2000);
});

주의!나는 단지 new의 대상일 뿐, 그것을 호출하지 않았다. 우리가 보낸 함수는 이미 집행되었다. 이것은 주의해야 할 세부 사항이다.그래서 우리는 Promise를 사용할 때 보통 하나의 함수에 패키지되어 있고 필요할 때 이 함수를 실행한다. 예를 들어 다음과 같다.
function runAsync(){
    var p = new Promise(function(resolve, reject){
        //       
        setTimeout(function(){
            console.log('    ');
            resolve('      ');
        }, 2000);
    });
    return p;            
}
runAsync()

이렇게 하면 연속적인 리셋은 다음과 같이 쓸 수 있다.
p.then(function(data){
    console.log(data);
    return runAsync2();
})
.then(function(data){
    console.log(data);
    return '      ';  //        
})
.then(function(data){
    console.log(data);
});

기본적인 용법은 위와 같이 이후에 다른 새로운 이해가 있으면 별도로 보충한다.

좋은 웹페이지 즐겨찾기