AngularJS - por que promete ($ q) com $ http?
Estou aprendendo o AngularJS após converter do jQuery por alguns anos. E alguns bits são muito mais intuitivos. Alguns nem tanto :).
Estou tentando entender o uso de promessas, principalmente $ q em uso com $ http e não parece haver muita informação sobre essas duas combinadas que eu possa encontrar.
Por que eu usaria promessas no lugar do retorno de chamada de sucesso / erro? Ambos fazem uso de retornos de chamada na realidade, então por que uma promessa é considerada melhor? Por exemplo. Eu poderia montar umget(...)
funcionar da seguinte maneira:
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
}
);
O que é bom (?) Porque me dá controle completo sobre o que está acontecendo. Se eu ligarget(...)
então eu posso controlar qualquer sucesso / erro onde quer queget
é chamado.
Se eu converter isso para usar promessas, então recebo:
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?
O que está condensado, eu concordo; também não precisamos nos preocupar explicitamente com o retorno de chamada de sucesso / erro, mas parece que perdi o controle sobre o retorno de chamada de erro para começar - porque não consigo configurar um segundo retorno de chamada para lidar com um erro.
O que significa que, se eu usar essa função em um serviço que pode ser usado por vários controladores, não será possível atualizar a interface do usuário para alertar o usuário sobre um erro.
Estou esquecendo de algo? Existe uma razão pela qual as promessas são preferidas? Não consigo encontrar um exemplo do porquê.