비동기 프로 그래 밍 - promise

비동기 프로 그래 밍 - promise
정의
Promise 는 비동기 프로 그래 밍 의 해결 방안 으로 전통 적 인 해결 방법 인 리 셋 함수 에 비해 Promise 를 사용 하 는 것 이 더욱 합 리 적 이 고 강력 하 며 리 셋 함수 간 의 층 층 이 겹 쳐 지 는 것 을 피 할 수 있 고 코드 구조 도 더욱 뚜렷 하고 유지 하기 편리 하 다.Promise 는 대상 입 니 다. 그 에 게 서 비동기 작업 정 보 를 얻 을 수 있 습 니 다. 그 는 용기 이기 도 합 니 다. 그 안에 사건 이 끝 난 후에 진행 할 작업 이 포함 되 어 있 습 니 다.
특징
Promise 대상 은 두 가지 특징 이 있 습 니 다.
  • 대상 의 상 태 는 외부의 간섭 을 받 지 않 는 다.Promise 대상 은 세 가지 상태 가 있 습 니 다. pending (진행 중), resolved (완료), rejected (실패), 구체 적 으로 어떤 상태 에 있 는 지 는 비동기 작업 의 결과 에 의 해 결정 되 고 다른 어떠한 조작 도 이 상 태 를 바 꿀 수 없습니다.
  • 일단 상태 가 바 뀌 면 다른 변화 가 없 을 것 이 고 언제든지 이 결 과 를 얻 을 수 있다.Promise 대상 상태의 변 화 는 두 가지 가 있 습 니 다. 1 >. pending 상태 에서 resolved 상태 까지 입 니 다.2 >. pending 상태 에서 rejected 상태 로;

  • 용법
    Promise 는 인 스 턴 스 를 만 드 는 구조 함수 입 니 다.
    var promise = new Promise(function(resolve,reject){
      if(/    /){
        resolve(val);
      }else{
         reject(val);
      }
    });
    promise.then(function(val){
    /        /
    },function(error){
    /        /
    });

    Promise 구조 함 수 는 하나의 함 수 를 매개 변수 로 받 습 니 다. 이 함 수 는 두 개의 매개 변수 resolve, reject 가 있 습 니 다. 이 두 개의 매개 변수 도 두 개의 함수 입 니 다. 자바 script 엔진 이 제공 되 므 로 스스로 실현 할 필요 가 없습니다.그 중에서 resolve 함수 의 역할 은 Promise 대상 의 상 태 를 '진행 중' 에서 '완료' 로 바 꾸 고 비동기 작업 이 성공 할 때 호출 하 며 비동기 작업 결 과 를 매개 변수 로 전달 하 는 것 이 상례 val 입 니 다.reject 함수 의 역할 은 Promise 대상 의 상 태 를 '진행 중' 에서 '실패' 로 바 꾸 고 비동기 작업 이 실 패 했 을 때 호출 하 며 작업 에 실패 한 오 류 를 매개 변수 로 전달 하 는 것 입 니 다.
    Promise 의 인 스 턴 스 는 then 방법 을 호출 할 수 있 습 니 다. then 방법 은 두 가지 함수 가 있 습 니 다. 첫 번 째 함 수 는 Promise 대상 상태 가 resosloved 로 변 했 을 때 실 행 된 함수 이 고 두 번 째 함 수 는 Promise 대상 상태 가 rejected 로 변 했 을 때 실 행 된 함수 입 니 다. 두 번 째 매개 변 수 는 선택 할 수 있 습 니 다.
    전형 적 인 예: 비동기 읽 기 파일
    function readFileFn(filename){
      return new Promise(function(resolve,reject){
        fs.readfile(filename,function(err,data){
          if(err){
            reject(err);
          }else{
            resolve(data);
          }
        });
      });
    }
    readFileFn("./test.txt").then(function(data){
      console.log(data.toString());
      //    ...
      },function(err){
        console.log(err);
    });
    then 방법 은 체인 식 의 표기 법 을 사용 할 수 있다. 즉,promise.then(...).then(...).then(..)
    구체 적 인 예:
    var promise = new Promse(function(resolve,reject){
        resolve(1);    // Promise       resolved,     1
    });
    promise.then(function(val){
        console.log(val);  // 1
        return val*3;
    }).then(function(val){
        console.log(val);  //3
        return val*3;
    }).then(function(val){
        console.log(val);  //9
    });

    4. Promise 대상 의 다른 방법
  • Promise. prototype. catch: 오류 가 발생 했 을 때의 리 셋 함 수 를 지정 하 는 데 사 용 됩 니 다. 일반적인 용법 은 then 방법 에서 두 번 째 인 자 를 생략 한 다음 에 체인 호출 된 끝부분 에서 catch 방법 으로 비동기 조작 이나 then 방법의 오 류 를 포착 하 는 것 입 니 다.
  • readFileFn("./test.txt").then(function(data){
      console.log(data.toString());
      //    ...
    }).catch(function(err){
        console.log(err);
    })
    //     
    var promise = new Promise(function(resolve,reject){
        reject(new Error("test"));
    });
    promise.then(function(val){
        //...
    }).catch(function(err){
        console.log(err);
        //..
    });
  • Promise. all (): 다음 방법 은 여러 Promise 인 스 턴 스 를 새로운 Promise 인 스 턴 스 로 포장 하 는 데 사 용 됩 니 다.Promise. all () 방법 은 하나의 배열 을 매개 변수 로 받 습 니 다.
  • var p = Promise.all([a,b,c]); //a,b,c Promise
    p 최종 상 태 는 a, b, c 세 가지 로 결정 합 니 다.
    1 >. a, b, c 의 상태 가 모두 resolved 일 때 p 의 상태 가 resolved 입 니 다. 이때 a, b, c 의 반환 값 은 하나의 배열 을 구성 하여 p 에 전달 하 는 반전 함수 입 니 다.
    2 >. a, b, c 에 한 상태 가 있 을 때 reject, p 의 상 태 는 reject 입 니 다. 이때 reject 의 인 스 턴 스 반환 값 은 p 의 반전 함수 에 전 달 됩 니 다.
    var promises = [1,2,3,4].map(function(id){
        return readFileFn("./test"+id+".txt");  //readFileFn()         
    });
    Promise.all(promises).then(function(val){
        //...
    }).catch(function(err){
        //...
    });
  • Promise. race (): 똑 같이 여러 Promise 인 스 턴 스 를 새로운 Promise 인 스 턴 스 로 포장 하여 Promise. all () 방법 과 유사 합 니 다.
  • Promise. resolve (): 비 Promise 대상 을 Promise 대상 으로 전환 합 니 다.
  • var promise = Promise.resolve($.ajax("./test.txt"));
    Promise. resolve () 는 네 가지 유형의 인자 가 있 습 니 다.
    1 >. Promise 인 스 턴 스, 그러면 함수 가 매개 변 수 를 수정 하지 않 고 그대로 돌아 갑 니 다.
    2 >. 일반 대상 은 상례 와 같이 promise 대상 으로 되 돌아 갑 니 다.
    3 >. 대상 이 아 닌 일반적인 변수, 예 를 들 어 'hello', 2 등 은 새로운 Promise 인 스 턴 스 를 되 돌려 줍 니 다. 상 태 는 resolved () 이 고 'hello' 는 매개 변수 로 then 에 게 전달 하 는 첫 번 째 방법 입 니 다.
    var p = Promise.resolve("hello");
    p.then(function(val){        //        
      console.log(val);  //hello
    });

    4 >. 인자 가 없 으 면 Resolved 상태의 Promise 대상 을 직접 되 돌려 줍 니 다.
  • Promise. reject (): rejected 상태 인 인 스 턴 스 를 되 돌려 줍 니 다. 매개 변 수 는 Promise. resolve () 방법의 세 번 째 매개 변수 와 유사 합 니 다.
  • done (): Promise 내부 의 오 류 는 전체 국면 에 거품 이 생기 지 않 기 때문에 리 셋 체인 의 마지막 에 오류 가 발생 하면 잡 을 수 없 기 때문에 done() 방법 이 있 습 니 다. 리 셋 체인 의 맨 끝 에 위치 하여 오 류 를 잡 는 데 사 용 됩 니 다.
  • promise.then(function(){}).then(function(){}).catch(function(){}).done();
  • finally (): Promise 의 마지막 상태 와 상 관 없 이 실 행 될 동작 을 지정 합 니 다. 그 와 done() 의 차 이 는 일반적인 반전 함 수 를 매개 변수 로 받 아들 일 수 있 고 이 함 수 는 반드시 실 행 될 것 입 니 다.
  • 좋은 웹페이지 즐겨찾기