我想将我的模块/ SDK中的promise返回到非角度javascript。例如,如果我将承诺返回给jQuery,则可能应该发送jQuery延迟对象。如何将Angular promise转换为jquery promise / deferred obj。
任何建议,不胜感激。
免责声明 :jQuery的承诺不与其他图书馆发挥不错-在 所有 。jQuery不会自行吸收其他第三方的承诺。另一方面,Angular $ q promise-将会,因此,只要您有选择,就将jQuery promise吸收为Angular promise,反之亦然。(如果您看到此免责声明,并且3.0已经发布,则jQuery 3.0中的所有这些更改都会发生-请发表评论)。
将jQuery Promise转换为Angular Promise:
var angularPromise = $q.when(jQueryPromise); // eg: $q.when($.get(...));
将jQuery Promise转换为本地或Bluebird Promise:
var promise = Promise.resolve(jQueryPromise); // eg: Promise.resolve($.get(..));
将Promises / A +投诉承诺(例如$ q Angular承诺或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
同样值得注意的是 -Angular Promise会消耗jQuery Promise :
$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 });