一尘不染

如何将Angular Promise转换为jQuery延迟对象

angularjs

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

任何建议,不胜感激。


阅读 217

收藏
2020-07-04

共1个答案

一尘不染

免责声明 :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
});
2020-07-04