js promise

4880 단어 jspromise
배경
nodejs 가 빠르다 는 것 을 잘 알 고 있 습 니 다.왜 이렇게 빠 를 까요?그 이 유 는 node 가 기 다 려 야 할 사건 을 비동기 적 으로 처리 하여 코드 가 계속 실행 되 고 어 딘 가 에서 기다 리 지 않 아 도 되 기 때 문 입 니 다.그러나 좋 지 않 은 점도 있다.우리 가 리 셋 을 많이 할 때,예 를 들 어 이 리 셋 을 실행 하고 나 면 다음 리 셋 을 실행 해 야 한다.그 다음 에 다음 리 셋 을 실행 하면 층 층 이 새 겨 지고 코드 가 뚜렷 하지 않 으 며'리 셋 감옥'에 들 어가 기 쉽다.그러면 다음 의 예 를 들 기 쉽다.

async(1, function(value){
 async(value, function(value){
 async(value, function(value){
  async(value, function(value){
  async(value, function(value){
   async(value, final);
  });
  });
 });
 });
});
이런 표기 법 은 사람 을 붕괴 시 킬 수 있다.그렇다면 이 문 제 를 해결 할 수 있 는 방법 이 있 을 까?아니면 다른 표기 법 이 있 을 까?정 답 은 있 습 니 다.es6 에서 새로 나 온 promise 대상 은 이미 es7 의 async await 가 이 문 제 를 해결 할 수 있 습 니 다.물론 promise 대상 을 먼저 소개 합 니 다.es7 의 async await 는 뒤의 글 에서 공유 할 것 입 니 다.다음은 앞으로 Promise 대상 을 소개 하 겠 습 니 다.
소개
Promise,그 는 대상 입 니 다.비동기 작업 을 처리 하 는 데 사 용 됩 니 다.비동기 호출 을 쓸 때 더욱 우아 하고 아름 다 우 며 읽 기 편 합 니 다.말 그대로 약속,약속 이라는 뜻 이다.Promise 를 사용 한 후에 그 는 반드시 우리 에 게 대답 을 해 줄 것 이다.성공 하 든 실패 하 든 우리 에 게 대답 을 해 줄 것 이기 때문에 우 리 는 그 가 도망 갈 까 봐 걱정 하지 않 아 도 된다.하하.따라서 Promise 는 세 가지 상태 가 있 습 니 다.pending(진행 중),resolved(완료),rejected(실패).비동기 적 으로 돌아 오 는 구조 만 이 상 태 를 바 꿀 수 있다.그래서 promise 의 과정 은 보통 두 가지 밖 에 없다.pending->resolved 또는 pending->rejected.
promise 대상 은 리 셋 함 수 를 실행 하 는 데 자주 사용 되 는 then 방법 이 있 습 니 다.then 방법 은 두 개의 인 자 를 받 아들 입 니 다.첫 번 째 는 성공 적 인 resolved 의 리 셋 입 니 다.다른 하 나 는 실패 rejected 의 리 셋 입 니 다.두 번 째 실패 한 리 셋 인 자 는 선택 할 수 있 습 니 다.그리고 then 방법 에서 promise 대상 으로 돌아 갈 수 있 습 니 다.그러면 체인 호출 이 가능 합 니 다.다음 코드:

var Pro = function (time) {
   //    Promise  
   return new Promise(function (resolve, reject) {
    console.log('123');
    //      
    setTimeout(function () {
     //    Promise    ,     then        
     resolve('    ');
    }, time);
   })
  };
  (function(){
   console.log('start');
   Pro(3000)
   .then(function(data){
    console.log(data);
    return Pro(5000);})
   .then(function(data){
    console.log(data);
    console.log('end');
   })
  })();
위의 코드 에서 Pro 변 수 를 정의 한 다음 에 익명 함 수 를 그 에 게 부여 합 니 다.함 수 는 Promise 대상 으로 돌아 간 다음 에 대상 에서 함 수 를 받 습 니 다.각각 resolve 와 reject 방법 을 매개 변수 로 전송 하고 setTimeOut 으로 비동기 요청 을 모 의 한 다음 resolve 방법 을 실행 하면 then 방법의 함 수 를 호출 합 니 다.결 과 는 다음 과 같다.

3.Promise api
1、Promise.resolve()
2、Promise.reject()
3、Promise.prototype.then()
4、Promise.prototype.catch()
5.Promise.all()//모든 것 이 완성 되 었 습 니 다.
6.Promise.race()//하 나 를 완성 하면 됩 니 다.
1.Promise.resolve()의 역할 은 기 존 대상 을 Promise 대상 resolvedl 로 전환 합 니 다.Promise.resolve('test')==new Promise(resolve=>resolve('test'))
2.Promise.reject()도 Promise 대상 을 되 돌려 주 고 상 태 는 rejected 입 니 다.
3.then 방법 은 위 에서 이미 소 개 했 으 니 여 기 는 더 이상 소개 하지 않 겠 습 니 다.
4.catch():잘못된 반전 함수 가 발생 했 습 니 다.
5.Promise.all()은 모든 결과 가 완성 되 어야 then()의 성공 적 인 작업 을 수행 할 수 있 습 니 다.예 를 들 어:

let p1 =new Promise(function(resolve,reject){
   resolve(1);
  });
  let p2 = new Promise(function(resolve,reject){
   resolve(2);
  });
  let p3 = new Promise(function(resolve,reject){
   resolve(3);
  });
  Promise.all([p1, p2, p3]).then(function (results) {
   console.log('success:'+results);
  }).catch(function(r){
   console.log("error");
   console.log(r);
  });
마지막 출력:

6.Promise.race()의 역할 도 여러 개의 인 스 턴 스 를 동시에 수행 합 니 다.하나의 인 스 턴 스 가 상 태 를 바 꾸 면 Promise 는 그 인 스 턴 스 가 바 꾼 상태 로 바 꿉 니 다.

var Pro = function () {
   //    Promise  
   return new Promise(function (resolve, reject) {
    //      
    setTimeout(function () {
     resolve(true);
    }, 1000);
   })
  };
  var Pro2 = function () {
   //    Promise  
   return new Promise(function (resolve, reject) {
    //      
    setTimeout(function () {
     resolve('Pro2    ');
    }, 1000);
   })
  };
  
  Pro().then(function(data){
   var val = data;
   console.log(val)
   if (val) {
    console.log(1111)
    return Pro2()
   }
   
  }).then(function(data1){
   console.log(data1)
  })
출력:

이렇게 하면 then 방법 으로 체인 호출 을 실현 할 수 있다.
이상 의 이 간단 한 이 야 기 는 js promise 에서 이 편 을 보면 충분 합 니 다.바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 에 게 참고 가 되 고 여러분 들 이 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기