2014-07-07 7 views
8

मैं अपने मॉड्यूल/एसडीके से गैर-कोणीय जावास्क्रिप्ट में वादे वापस करना चाहता हूं। उदाहरण के लिए यदि मैं एक jquery के लिए वादा वापस कर रहा हूँ, तो मुझे शायद jquery स्थगित वस्तु भेजना चाहिए। मैं एक कोणीय वादे को एक jquery वादा/स्थगित ओबीजे में कैसे परिवर्तित कर सकता हूं।एंगुलर वादा को jquery deferred ऑब्जेक्ट को कैसे परिवर्तित करें

किसी भी सुझाव की बहुत सराहना की जाती है।

+0

क्यों? एक उदाहरण है? –

+0

उदाहरण के लिए आप $ q.when (thirdPartyromromise) का उपयोग कर किसी भी तीसरे पक्ष के वादे को $ q/Q वादे में परिवर्तित कर सकते हैं। लेकिन उस पुस्तकालय को मेरे वादे का उपयोग करने के लिए होना चाहिए। मैं अपने क्लाइंट को क्यू या कोणीय का उपयोग करने के लिए मजबूर नहीं करना चाहता ताकि वह मेरा वादा पुन: उपयोग कर सके। अगर मैं इसे संगत वादे में परिवर्तित कर सकता हूं तो वह चाहता था कि इसका उपयोग करने में कम दर्द होगा। – phani

+0

आपको कम से कम वादा लाइब्रेरी का उपयोग करने पर विचार करना चाहिए और jQuery के वादे नहीं, jQuery वादे त्रुटि प्रबंधन में स्वाभाविक रूप से समस्याग्रस्त हैं। कार्यान्वयन के बीच –

उत्तर

20

अस्वीकरण: jQuery वादों अन्य पुस्तकालयों के साथ अच्छा नहीं खेलते हैं - सभी पर। jQuery अपने आप पर अन्य तीसरे पक्ष के वादे को आत्मसात नहीं करेगा। कोणीय $ q दूसरी तरफ वादा करता है - होगा, इसलिए जब भी आपके पास विकल्प हो, तो jQuery वचन को एक कोणीय वादे में आत्मसात करें और इसके विपरीत नहीं। (यदि आप इस अस्वीकरण को देखते हैं और 3.0 को पहले से ही जारी कर दिया गया है, तो यह सभी परिवर्तन jQuery 3.0 में जारी हैं - कृपया एक टिप्पणी छोड़ दें)।

एक कोणीय वादा में एक jQuery वादा परिवर्तित:

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

एक देशी या Bluebird वादा करने के लिए एक jQuery वादा परिवर्तित:

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

एक वादे/ए + शिकायत $ q कोणीय तरह वादा परिवर्तित वादा या ब्लूबर्ड वादा या 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

आपके उत्तर बेंजामिन के लिए बहुत बहुत धन्यवाद। – phani

+0

हैलो, मेरे पास सिग्नलआर वादा है (सिग्नलआर एक jquery वादा देता है), chunkPromise = proxy.server.myMethod (ए, बी) लेकिन जब मैं $ q.when (chunkPromise) लौटा हुआ ऑब्जेक्ट "डी" होता है, केवल एक $$ राज्य सदस्य, और एक $ क्यू वादा नहीं। मुझसे क्या गलती हुई है? – pomarc

+0

Jquery 3.0 जारी किया गया है;) –

संबंधित मुद्दे