Sto imparando AngularJS dopo la conversione da jQuery per alcuni anni. E alcuni bit sono molto più intuitivi. Alcuni non così tanto :).
Sto cercando di capire come utilizzare le promesse, in particolare $ q in uso con $ http e non sembrano esserci troppe informazioni attorno a queste due combinate che riesco a trovare.
Perché dovrei usare le promesse al posto del callback di successo/errore? Entrambi fanno l'uso di callback in realtà, quindi perché una promessa è considerata migliore? Per esempio. Potrei impostare una funzione get(...)
come segue:
function get(url, success, error) {
success = success || function() {};
error = error || function() {};
$http.get(url)
.success(function (data) {
success(data);
})
.error(function (error) {
error(error);
});
}
get('http://myservice.com/JSON/',
function() {
// do something with data
},
function() {
// display an error
}
);
Il che è un bene perché mi dà il controllo completo su ciò che sta accadendo (?). Se chiamo get(...)
allora posso controllare qualsiasi successo/errore ovunque venga chiamato get
.
Se converto questa opzione per utilizzare le promesse, allora ottengo:
function get(url) {
return $http.get(url)
.then(function (data) {
return data;
},
function (error) {
return error;
});
}
get('http://myservice.com/JSON/')
.then(function (data) {
// do something with data
});
// cannot handle my errors?
Che è condensato, sono d'accordo; inoltre, non dobbiamo preoccuparci esplicitamente della funzione di richiamo/errore, ma sembra che abbia perso il controllo sulla mia chiamata di errore per l'avvio - perché non riesco a configurare un secondo callback per gestire un errore.
Ciò significa che se utilizzo questa funzione in un servizio che può essere utilizzato da più controller, non è possibile aggiornare l'IU per avvisare l'utente di un errore.
Mi manca qualcosa? C'è una ragione per cui le promesse sono preferite? Non riesco a trovare un esempio perché.
Prima di tutto la notazione completa per 'then' è' then (successCallback, errorcallback) '. Quindi puoi ancora gestire gli errori. Quindi, puoi anche usare metodi separati come ".success" e "fail". – dfsq
è possibile concatenare promesse, è il più grande vantaggio per me – harishr
@dfsq Oh OK - I am my callback di errore non è stato attivato quando ho usato 'then' per chiamare' http: // myservice.com/JSON/'. Dovrò riprovare. Does.then (successCallback, errorCallback) fa lo stesso di .success (successCallback) .fail (errorCallback)? – keldar