$ q e Promise com chamada ajax em AngularJS

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 $qdependê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 myDataServiceque 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

Verifique também as perguntas e experiências das entrevistas e compartilhe seus comentários sobre este artigo nos comentários abaixo. Felicidades !