Isso é um "antipadrão diferido"?
Estou achando difícil entender o "antipadrão diferido". Acho que o entendo principalmente, mas não vi um exemplo super simples de que serviço, com uma promessa diferente e um com antipadrão, então imaginei que tentaria fazer o meu, mas vendo como não sou super sabendo disso, eu gostaria de obter alguns esclarecimentos primeiro.
Eu tenho o abaixo em uma fábrica (SomeFactory):
//url = 'data.json';
return {
getData: function(){
var deferred = $q.defer();
$http.get(destinationFactory.url)
.then(function (response) {
if (typeof response.data === 'object') {
deferred.resolve(response.data);
} else {
return deferred.reject(response.data);
}
})
.catch(function (error) {
deferred.reject(error);
});
return deferred.promise;
}
O motivo pelo qual estou verificando seu objeto é apenas adicionar uma camada simples de validação ao$http.get()
E abaixo, na minha diretiva:
this.var = SomeFactory.getData()
.then(function(response) {
//some variable = response;
})
.catch(function(response) {
//Do error handling here
});
Agora, para meu entendimento, este é um antipadrão. Porque a promessa adiada original pega o erro e simplesmente o engole. Ele não retorna o erro, portanto, quando esse método "getData" é chamado, eu faço outra captura para capturar o erro.
Se esse NÃO é um antipadrão, alguém pode explicar por que ambos exigem uma espécie de "retorno de chamada"? Quando comecei a escrever esta diretiva / fábrica, previ ter que fazer uma promessa adiada em algum lugar, mas não esperava ter que.catch()
dos dois lados (ou seja, eu estava pensando que poderia fazer a fábrica retornar a resposta ou o erro se fizesse umaSomeFactory.getData()