Como usar a resposta promise $ http fora do manipulador de sucesso

$scope.tempObject = {}; $http({ method: 'GET', url: '/myRestUrl' }).then(function successCallback(response) { $scope.tempObject = response console.log("Temp Object in successCallback ", $scope.tempObject); }, function errorCallback(response) { }); console.log("Temp Object outside $http ", $scope.tempObject); 

Eu estou recebendo resposta em successCallback mas não recebendo $scope.tempObject fora de $http . sua exibição undefined .

Como acessar a response ou $scope.tempObject após $http

Mas se eu quiser usar $ scope.tempObject após o retorno de chamada, então como posso usá-lo. ?

Você precisa encadear a partir do httpPromise. Salve o httpPromise e retorne o valor para a function de manipulador onFullfilled.

 //save httpPromise for chaining var httpPromise = $http({ method: 'GET', url: '/myRestUrl' }).then(function onFulfilledHandler(response) { $scope.tempObject = response console.log("Temp Object in successCallback ", $scope.tempObject); //return object for chaining return $scope.tempObject; }); 

Em seguida, fora de sua cadeia do httpPromise.

 httpPromise.then (function (tempObject) { console.log("Temp Object outside $http ", tempObject); }); 

Para obter mais informações, consulte Referência da API do serviço AngularJS $ q – promises de encadeamento .

É possível criar cadeias de qualquer tamanho e, como uma promise pode ser resolvida com outra promise (que adiará sua resolução), é possível pausar / adiar a resolução das promises em qualquer ponto da cadeia. Isso possibilita a implementação de APIs poderosas. 1


Explicação de operações assíncronas baseadas em promise

 console.log("Part1"); console.log("Part2"); var promise = $http.get(url); promise.then(function successHandler(response){ console.log("Part3"); }); console.log("Part4"); 

foto

O log do console para “Part4” não precisa esperar que os dados retornem do servidor. Ele é executado imediatamente após o início do XHR. O log do console para “Part3” está dentro de uma function de manipulador de sucesso mantida pelo serviço $ q e chamada depois que os dados chegaram do servidor e o XHR é concluído .

Demonstração

 console.log("Part 1"); console.log("Part 2"); var promise = new Promise(r=>r()); promise.then(function() { console.log("Part 3"); }); console.log("Part *4*"); 

Chamada $ http é chamada assíncrona. A function de retorno de chamada é executada quando retorna uma resposta. Enquanto isso, o restante da function continua executando e registra $ scope.tempObject como {}. Quando o $ http é resolvido, apenas $ scope.tempObject é definido. Angular irá vincular o valor alterado automaticamente usando binding bidirecional.

{{tempObject}} na exibição será atualizado automaticamente.

Se você quiser usar tempObject após o retorno de chamada, faça isso

 then(function(data){ onSuccess(data); },function(){ }); function onSuccess(data){ // do something } 

Tente usar um $ scope. $ Apply antes para concluir a function successCallback. Uma outra solução é alterar successCallback -> function assim:

 $http({ method: 'GET', url: '/myRestUrl' }).then(function(success) { $scope.tempObject = success; console.log("Temp Object in successCallback ", $scope.tempObject); }, function(error) { }); 
Intereting Posts