Atribuição de valores sendo perdida

11 views
Skip to first unread message

Thyago Henrique

unread,
Feb 18, 2015, 8:33:52 AM2/18/15
to angula...@googlegroups.com
Olá pessoal,estou tendo problema quando atribuo um valor dentro de um escopo!
Estou tentando atribuir uma variável global, que está fora do escopo da requisição $http.post e caso ele entre no sucesso, eu tento atribuir o valor que está sendo retornado dentro dela.

Segue o código:

meusControllers.controller('EstatisticaController', ['$scope', '$http', function($scope, $http){
var acertos = 0;
var erros = 0;

$http.post(url,{"id_simulado":1,"id_usuario":15})
.success(function(data){
acertos = acertos + Number(data[0].acertou);
erros = erros + Number(data[0].errou);
alert("valor 1:"+acertos);
alert("valor 2:"+erros);
}).error(function(error){
alert("Error"); 
});

alert("valor 3:"+acertos);
alert("valor 4:"+erros);

}]);


O valor 1 e valor 2 são exibidos corretamente(que é o valor do retorno da requisição $http.post)!
Mas o valor 3 e valor 4 ao invés de exibir os mesmos valores(que foi atribuido no retorno), eles estão exibindo os valores iniciais(que é 0);

Aonde estou errando?
Obrigado!

Douglas Lira

unread,
Feb 18, 2015, 8:39:55 AM2/18/15
to angula...@googlegroups.com
Dê uma olhada em $promise. ;)

--
Você recebeu essa mensagem porque está inscrito no grupo "AngularJS BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para angularjs-br...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Atenciosamente,

Douglas Lira
"No que diz respeito ao empenho, ao compromisso, ao esforço, à dedicação, não existe meio termo. Ou você faz a coisa bem feita ou não faz."

William Thiago

unread,
Feb 18, 2015, 8:40:28 AM2/18/15
to angula...@googlegroups.com
Isso ocorre pois o $http.post é um metodo assíncrono (por isso o uso dos callbacks em success/error).
Por ser uma linguagem interpretada por um motor que não suporta thread, tudo é feito de forma assíncrona, exigindo que pensemos de forma diferente.
Os alerts 3/4 são executados antes mesmo do success, ou seja, antes de você atribuir alguma coisa nas variáveis.

Se quiser simular isso, envolve num timeout:
Deixei com um valor alto para compensar a requisição HTTP. Logicamente isso é uma simulação, não use! 

$http.post(url,{"id_simulado":1,"id_usuario":15})
.success(function(data){
  acertos = acertos + Number(data[0].acertou);
  erros = erros + Number(data[0].errou);
  alert("valor 1:"+acertos);
  alert("valor 2:"+erros);
 
 }).error(function(error){
    alert("Error"); 
});

setTimeout(function() { 
alert("valor 3:"+acertos);
alert("valor 4:"+erros);
}, 3000);






[]s
William Thiago

--

Thyago Henrique

unread,
Feb 18, 2015, 8:50:13 AM2/18/15
to angula...@googlegroups.com
Vou da uma olhada sim @Douglas Lira!
----
@William Thiago
Entendi, vc poderia mindar um exemplo, de como usar essa ideia do "callback" que vc mencionou?ou manda algum site que explique como usar!

Obg!

Douglas Lira

unread,
Feb 18, 2015, 9:39:35 AM2/18/15
to angula...@googlegroups.com
Boa William!!

Américo Neto

unread,
Feb 18, 2015, 9:39:41 AM2/18/15
to angula...@googlegroups.com

Thyago Henrique

unread,
Feb 18, 2015, 11:17:57 AM2/18/15
to angula...@googlegroups.com
ok,irei da uma estudada! Obg a todos :)

--
Você recebeu essa mensagem porque está inscrito em um tópico no grupo "AngularJS BR" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/angularjs-br/D7L4iQHuElE/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para angularjs-br...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages