2014-07-07 14 views
8

Voglio restituire promesse dal mio modulo/sdk a javascript non angolare. Ad esempio, se restituisco la promessa a un jQuery, dovrei probabilmente inviare l'oggetto rinviato a jQuery. Come posso convertire una promessa angolare in una promessa jquery/oggetto differito.Come convertire la promessa angolare a jquery oggetto posticipato

Qualsiasi suggerimento è molto apprezzato.

+0

Perché? Hai un esempio? –

+0

Ad esempio, è possibile convertire qualsiasi promessa di terze parti a una promessa $ q/Q utilizzando $ q.quando (thirdPartyPromise). Ma dovrei avere quella libreria per usare la mia promessa. Non voglio forzare il mio cliente a usare Q o angolare in modo che possa riutilizzare la mia promessa. Se potessi convertirlo alla promessa compatibile che voleva sarebbe meno doloroso da usare. – phani

+0

Si dovrebbe considerare l'utilizzo di una libreria di promessa minimalista e non di promesse jQuery, le promesse di jQuery sono intrinsecamente problematiche nella gestione degli errori. –

risposta

20

responsabilità: promesse jQuery non giochino carino con altre biblioteche - a tutto. jQuery non assimilerà altre promesse di terze parti da solo. D'altra parte, promette $ angolari - così, ogni volta che avrai la scelta, assimilerai la promessa jQuery in una promessa angolare e non viceversa. (Tutto questo cambia in jQuery 3.0, se vedi questo disclaimer e 3.0 è già stato rilasciato - per favore lascia un commento).

Conversione di una promessa jQuery in una promessa angolare:

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

Conversione di una promessa jQuery per una promessa nativo o Bluebird:

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

Conversione di un Promises/A + denuncia promessa come $ q angolare promessa o promessa di Bluebird o promesse native nelle promesse di 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 

Anche la pena notare - promesse angolare può consumare jQuery promette:

$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 
}); 
+1

Grazie mille per la risposta, Benjamin. – phani

+0

ciao, ho una promessa signalR (SignalR restituisce una promessa di Jquery), chunkPromise = proxy.server.myMethod (a, b) ma quando faccio $ q.quando (chunkPromise) l'oggetto restituito è "d", con solo un membro dello stato di $$, e non una promessa di $ q. cosa faccio di sbagliato? – pomarc

+0

Jquery 3.0 è stato rilasciato;) –

Problemi correlati