Nesta dica rápida eu tenho uma função em meu controlador que fará uso de um serviço que obtém alguns dados usando uma solicitação ajax. A função retorna o status da solicitação de obtenção de dados usando um objeto adiado.
Antes de ler mais, faça uma viagem rápida a este link e familiarize-se com os fundamentos de $q
(promessa / implementação adiada)
Serviço
Considere um serviço simples com uma getAbc()
função.
angular
.module('myApp')
.service('myDataService', ['$http', function ($http) {
this.getAbc = function ($params) {
return $http({
headers: { 'Content-Type': 'application/json' },
url: '/api/ABC',
method: "POST",
data: $params
});
};
} ]);
Controlador
Em seu controlador, certifique-se de injetar a $q
dependência como mostrado abaixo.
.controller('GridController', ['$scope', '$http', 'myDataService', '$q', function ($scope, $http, myDataService, $q) {...
$ q.defer ()
Abaixo está o código em que agora uso o serviço myDataService
que acabamos de criar.
$q.defer()
constrói uma nova instância de deferred. O objetivo do objeto adiado é expor a instância Promise associada, bem como APIs que podem ser usadas para sinalizar a conclusão bem-sucedida ou malsucedida, bem como o status da tarefa.
$scope.DoSomething = function() {
var paramsToPost = null; // you could pass something useful here.
var deferred = $q.defer();
deferred.notify();
myDataService.getAbc(paramsToPost)
.success(function() {
deferred.resolve();
})
.error(function() {
deferred.reject();
});
return deferred.promise;
};
Métodos
resolver (valor) – resolve a promessa derivada com o valor. Se o valor for uma rejeição construída por meio de $ q.reject, a promessa será rejeitada.
rejeitar (razão) – rejeita a promessa derivada com a razão. Isso é equivalente a resolvê-lo com uma rejeição construída via $ q.reject.
notificar (valor) – fornece atualizações sobre o status de execução da promessa. Isso pode ser chamado várias vezes antes que a promessa seja resolvida ou rejeitada.
var promise = DoSomething();
promise.then(function(successParam) { // success callback
console.log("success");
}, function(rejectParam) { // error callback with reason
console.log("rejected");
}, function(notifyParam) { // notification
console.log("notify");
});
Espero que isto ajude 🙂
Referências
– https://docs.angularjs.org/api/ng/service/$q
Links que você pode precisar se estiver trabalhando com $ q
- http://stackoverflow.com/questions/22379733/angularjs-console-log-q-is-not-defined
- https://groups.google.com/forum/#!topic/angular/jWFiLFyvubo
Verifique também as perguntas e experiências das entrevistas e compartilhe seus comentários sobre este artigo nos comentários abaixo. Felicidades !