$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);
我在successCallback
收到回复但是
没有$scope.tempObject
在$http
之外。它显示undefined
。
如何在response
$scope.tempObject
或$http
答案 0 :(得分:4)
但是如果我想在回调后使用$ scope.tempObject,那么我该如何使用它呢? ?
您需要从httpPromise 链。将httpPromise和返回值保存到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;
});
然后在httpPromise之外链。
httpPromise.then (function (tempObject) {
console.log("Temp Object outside $http ", tempObject);
});
有关详细信息,请参阅AngularJS $q Service API Reference -- chaining promises。
可以创建任意长度的链,并且由于可以使用另一个承诺(将进一步推迟其解析)来解决承诺,因此可以在链中的任何点暂停/推迟承诺的解析。这使得实现强大的API成为可能。 1
console.log("Part1");
console.log("Part2");
var promise = $http.get(url);
promise.then(function successHandler(response){
console.log("Part3");
});
console.log("Part4");
“Part4”的控制台日志不必等待数据从服务器返回。它在XHR 启动后立即执行。 “Part3”的控制台日志位于成功处理函数内部,该函数由$q service保留,并在数据从服务器到达并且XHR 完成后调用 。
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*");
答案 1 :(得分:0)
$ http呼叫是异步呼叫。回调函数在返回响应时执行。同时,函数的其余部分继续执行并将$ scope.tempObject记录为{}。 解析$ http后,只设置$ scope.tempObject。 Angular将使用双向绑定自动绑定更改的值。
{{tempObject}}在视图中会自行更新。
如果要在回调后使用tempObject,请执行此操作
then(function(data){
onSuccess(data);
},function(){
});
function onSuccess(data){
// do something
}
答案 2 :(得分:-1)
尝试使用$ scope。$ apply之前完成successCallback函数。另一个解决方案是更改successCallback - >功能如此:
$http({ method: 'GET', url: '/myRestUrl' }).then(function(success) { $scope.tempObject = success; console.log("Temp Object in successCallback ", $scope.tempObject); }, function(error) { });