我想從我的模塊/ sdk返回承諾到非角度的JavaScript。例如,如果我將jQuery的承諾返回,我應該可能會發送jQuery延遲對象。我怎樣才能將一個Angular promise轉換成jquery promise/deferred obj。如何將Angular承諾轉換爲jQuery延期對象
任何建議,非常感謝。
我想從我的模塊/ sdk返回承諾到非角度的JavaScript。例如,如果我將jQuery的承諾返回,我應該可能會發送jQuery延遲對象。我怎樣才能將一個Angular promise轉換成jquery promise/deferred obj。如何將Angular承諾轉換爲jQuery延期對象
任何建議,非常感謝。
免責聲明:jQuery的承諾沒有發揮好與其他圖書館 - 在
所有。 jQuery不會同意其他第三方的承諾。另一方面,角度的$ q承諾 - 會,所以無論何時你有選擇,將jQuery承諾融入到Angular承諾中,而不是相反。 (所有這一切都改變了jQuery 3.0,如果你看到這個免責聲明和3.0已經發布 - 請留下評論)。
轉換一個jQuery的承諾轉變成一個角承諾:
var angularPromise = $q.when(jQueryPromise); // eg: $q.when($.get(...));
轉換一個jQuery承諾到本地或藍鳥承諾:
var promise = Promise.resolve(jQueryPromise); // eg: Promise.resolve($.get(..));
轉換像$ Q角一個承諾/ A +投訴承諾承諾或藍鳥承諾或本土承諾轉化爲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
});
爲什麼?有一個例子嗎? –
例如,您可以使用$ q.when(thirdPartyPromise)將任何第三方承諾轉換爲$ q/Q承諾。但應該有這個圖書館來使用我的承諾。我不想強迫我的客戶使用Q或角度,以便他可以重用我的承諾。如果我可以將它轉換成兼容的承諾,那麼使用它就不那麼痛苦了。 – phani
你應該考慮使用極簡主義承諾庫而不是jQuery承諾,jQuery承諾在處理錯誤方面本質上是有問題的。 –