如何将Angular承诺转换为jquery延迟对象

我想将我的模块/ sdk中的promises返回给非角度javascript。 例如,如果我向jquery返回promise,我应该发送jquery延迟对象。 如何将Angular承诺转换为jquery promise / deferred obj。

任何建议都非常感谢。

免责声明 :jQuery承诺与其他库不相称 – 完全没有 jQuery不会自己吸收其他第三方承诺。 另一方面,Angular $ q承诺 – 将会是这样,所以无论何时你有选择权,都要将jQuery承诺同化为Angular承诺,而不是相反。 (所有这些都在jQuery 3.0中发生了变化,如果您看到此免责声明并且3.0已经发布 – 请发表评论)。

将jQuery承诺转换为Angular承诺:

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

将jQuery承诺转换为本机或Bluebird承诺:

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

转换Promise / A +投诉承诺,例如$ q Angular promise或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 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 }); 
Interesting Posts