Zastrzeżone: jQuery obietnice nie grać ładny z innych bibliotek - na
wszystko. jQuery nie będzie asymilować innych obietnic stron trzecich. Z drugiej strony obietnicowe obietnice q - będą, więc za każdym razem, gdy będziesz miał wybór, przyswoisz obietnicę jQuery do obietnicy Angular, a nie odwrotnie. (Wszystko to zmienia się w jQuery 3.0, jeśli widzisz to zastrzeżenie, a 3.0 zostało już wydane - zostaw komentarz).
Konwersja obietnicę jQuery do kątowym obietnicy:
var angularPromise = $q.when(jQueryPromise); // eg: $q.when($.get(...));
przekształcenie obietnicy jQuery natywny lub Bluebird obietnicy:
var promise = Promise.resolve(jQueryPromise); // eg: Promise.resolve($.get(..));
Konwersja obiecuje/A + reklamacji obietnicę jak $ q Kątowymi obietnica lub obietnica Bluebird lub natywne obietnice 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
Warto również zauważyć - kątowe obietnice mogą spożywać jQuery obiecuje:
$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
});
Dlaczego? Masz przykład? –
Na przykład można przekonwertować dowolną obietnicę strony trzeciej na obietnicę $ q/Q za pomocą $ q.when (thirdPartyPromise). Ale powinna mieć tę bibliotekę, by użyć mojej obietnicy. Nie chcę zmuszać mojego klienta do używania Q lub kątowego, aby mógł ponownie wykorzystać moją obietnicę. Gdybym mógł przekonwertować to na zgodną obietnicę, chciałby, żeby użycie jej było mniej bolesne. – phani
Należy rozważyć zastosowanie minimalistycznej biblioteki obietnic, a nie obietnic jQuery, obietnice jQuery są z natury problematyczne w obsłudze błędów. –