2016-09-02 2 views
0

를 사용할 때 다음과 같은 코드가 있습니다예기치 않은 출력 q.js

 var p1 = Q($.ajax({ 
      url: "/api/test1" 
     })); 

     p1.then(function() { 
      console.log("success1"); 
     }); 

     p1.then(function() { 
      throw "some error"; 
      console.log("success2"); 
     }); 

     p1.then(function() { 
      console.log("success3"); 
     }); 

     p1.catch(function() { 
      console.log("failure1"); 
     }); 
     p1.catch(function() { 
      console.log("failure2"); 
     }); 

     p1.finally(function() { 
      console.log("finally1"); 
     }); 
     p1.finally(function() { 
      console.log("finally2"); 
     }); 

내가 다시 API/TEST1에서 일부 데이터를 얻을 수 있다고 가정 다음과 같은 출력 기대하고있다 - "success1, failure1, failure2, finally1을, 예외가 발생했을 때 왜 코드는 다음 2에 전파됩니다 - finally2 success1, success3, finally1, finally3 "

"success3 "저를 당혹"나는 실제로 무엇을 얻을

는 은 "?

어떻게하면 그 부분에서 발생할 수있는 예외를 잡을 수 있습니까?

당신의 약속이 묶여 있지 않기 때문에 이유 "Success3"가 표시되어

답변

0

입니다.
기본적으로 "then"호출 (그 문제에 대한 "catch"및 "finally")은 서로 상호 의존적입니다. 나무 구조로 생각하면 모두 p1 약속의 자녀입니다. 자녀가 부양되기를 원하면 자녀, 손자, 증손자 등의 관계가 있어야합니다. 각 기능이 실행 된 후 기본적으로 암시 적으로 약속을 반환

var p1 = Q($.ajax({ 
     url: "/api/test1" 
    })); 

    p1.then(function() { 
     console.log("success1"); 
    }).then(function() { 
     throw "some error"; 
     console.log("success2"); 
    }).catch(function() { 
     console.log("failure"); 
    }); 

: 당신이 함께 체인 그들에게하려는 경우, 당신은 뭔가를 할 수 있습니다. 그 다음 "then"(또는 catch/finally)은 그 (암시 적) 반환 값에 적용됩니다.