2014-07-07 4 views
8

내 모듈/sdk에서 비 앵귤러 javascript로 약속을 반환하고 싶습니다. 예를 들어 약속을 jquery로 반환하는 경우 jquery 지연 객체를 보내야합니다. Angular promise를 jquery promise/deferred obj로 변환하려면 어떻게해야합니까?변환 방법 지연된 객체 jquery 각도 약속

모든 의견을 보내 주시면 감사하겠습니다.

+0

이유는 무엇입니까? 예를 들어? –

+0

예를 들어 $ q.when (thirdPartyPromise)를 사용하여 제 3 자 약속을 $ q/Q 약속으로 변환 할 수 있습니다. 그러나 내 약속을 사용하려면 도서관을 가져야합니다. 내 고객이 내 약속을 재사용 할 수 있도록 Q 또는 각도를 사용하도록 강요하고 싶지 않습니다. 그가 그것을 약속 한 양립성있는 약속으로 변환 할 수 있다면, 사용하는 데 덜 고통 스러울 것입니다. – phani

+0

jQuery 약속이 아닌 minimalist promise 라이브러리를 사용하는 것이 좋습니다. jQuery 약속은 오류 처리에서 본질적으로 문제가 있습니다. –

답변

20

면책 조항 : jQuery를 약속 다른 라이브러리와 좋은 연주하지 않는 - 모든에서. jQuery는 다른 제 3 자 약속을 자체적으로 동화하지 않습니다. Angular $ q는 다른 한편으로는 약속 할 것입니다. 따라서 선택의 여지가있을 때마다 jQuery 약속을 Angular 약속에 동화하고 그 반대는 아닙니다. (이 모든 면책 사항은 jQuery 3.0에서 변경되었으며이 면책 조항이 표시되고 3.0이 이미 릴리스되었습니다. 주석을 남겨주십시오).

var angularPromise = $q.when(jQueryPromise); // eg: $q.when($.get(...)); 

기본 또는 블루 버드 약속에 jQuery를 약속 변환 : $ q를 코너에게 같은 약속/A + 불만 약속을 변환

var promise = Promise.resolve(jQueryPromise); // eg: Promise.resolve($.get(..)); 

각도 약속에 jQuery를 약속 변환

약속 또는 Bluebird 약속 또는 jQuery 약속에 대한 기본 약속 :

function convert(p){ 
    var d = $.Deferred(); 
    p.then(function(val){ 
     d.resolve(val); 
    }, function(err){ 
     d.reject(err); 
    }); 
    return d.promise(); 
} 

var jqPromise = convert($http.get(...)); // example usage 

// you might be tempted to think you can easily do: 
var jqPromise = $.when($http.get(...)); 
// however - this will will fail inconsistently due to differences between 
// jQuery and Angular promises 

또한 가치에 주목 - 각도 약속 jQuery를이을 약속 소비 할 수 있습니다 :

$http.get(...).then(function(id){ 
    return $.get("http://..."+id); // will work, though pointless because $http.get 
}).then(function(result){ 
    // contains result of $.get call here 
}); 
+1

Benjamin에게 감사드립니다. – phani

+0

안녕하세요, 나는 signalR 약속 (SignalR은 Jquery 약속을 반환합니다), chunkPromise = proxy.server.myMethod (a, b) 하지만 $ q.when (chunkPromise) 할 때만 반환 된 객체는 "d"이고 $$ 국가 회원, $ q 약속은 아닙니다. 내가 뭘 잘못 했니? – pomarc

+0

Jquery 3.0이 출시되었습니다.) –