在 .then 方法之外未定义的范围变量
scope variable undefined outside `.then` method
我在 if 语句中更改了范围变量,在 if 语句之外它变成了未定义的变量
app.controller("Login", function($scope, $window,$http){
var status;
$scope.loginUser = function(logData){
$http.post('/corporate/login',logData).then(function(response){
var data = response.data
var status = data.success;
if(status == true){
$scope.logStatus = true;
console.log($scope.logStatus); // prints true
}else{
$scope.logStatus = false;
}
})
console.log($scope.logStatus); //prints undefined
}
});
$http
是异步的。您的 if/else
条件在成功回调中。问题是 console.log($scope.logStatus);
行在成功回调被调用之前被调用
您应该在 $http
调用之前初始化 $scope.logStatus = false
。
编辑:
如果像你说的那样,$scope.logStatus
仍然是错误的,那么检查你的 if 块是否被调用。见 fiddle:
outside ... it turned into an undefined variable
它没有“变成”undefined
值。代码中的最后 console.log
在成功处理程序中的 console.log 之前 执行 。它是 undefined
因为它还没有被成功处理程序设置。
基于 Promise 的异步操作详解
console.log("Part1");
console.log("Part2");
var promise = $http.get(url);
promise.then(function successHandler(response){
console.log("Part3");
});
console.log("Part4");
“第 4 部分”的控制台日志不必等待数据从服务器返回。它在 XHR starts 后立即执行。 “第 3 部分”的控制台日志位于 $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*");
我在 if 语句中更改了范围变量,在 if 语句之外它变成了未定义的变量
app.controller("Login", function($scope, $window,$http){
var status;
$scope.loginUser = function(logData){
$http.post('/corporate/login',logData).then(function(response){
var data = response.data
var status = data.success;
if(status == true){
$scope.logStatus = true;
console.log($scope.logStatus); // prints true
}else{
$scope.logStatus = false;
}
})
console.log($scope.logStatus); //prints undefined
}
});
$http
是异步的。您的 if/else
条件在成功回调中。问题是 console.log($scope.logStatus);
行在成功回调被调用之前被调用
您应该在 $http
调用之前初始化 $scope.logStatus = false
。
编辑:
如果像你说的那样,$scope.logStatus
仍然是错误的,那么检查你的 if 块是否被调用。见 fiddle:
outside ... it turned into an undefined variable
它没有“变成”undefined
值。代码中的最后 console.log
在成功处理程序中的 console.log 之前 执行 。它是 undefined
因为它还没有被成功处理程序设置。
基于 Promise 的异步操作详解
console.log("Part1");
console.log("Part2");
var promise = $http.get(url);
promise.then(function successHandler(response){
console.log("Part3");
});
console.log("Part4");
“第 4 部分”的控制台日志不必等待数据从服务器返回。它在 XHR starts 后立即执行。 “第 3 部分”的控制台日志位于 $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*");