范围变量undefined在.then`方法之外

时间:2017-04-16 12:20:10

标签: javascript angularjs ajax scope angular-promise

我在if语句中更改了scope变量,在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
    }
});

2 个答案:

答案 0 :(得分:0)

$http是异步的。您的if/else条件属于成功回调。问题是在调用成功回调之前调用console.log($scope.logStatus);

您应该在$scope.logStatus = false来电之前初始化$http

编辑:

如果您这么说,$scope.logStatus仍为假,那么请检查您的if块是否被调用。见小提琴:

https://jsfiddle.net/51bsbzL0/253/

答案 1 :(得分:0)

  

外面......它变成了一个未定义的变量

它没有变成" undefinedconsole.log。代码中的最后一个undefined在成功处理程序中的 console.log之前执行。它是console.log("Part1"); console.log("Part2"); var promise = $http.get(url); promise.then(function successHandler(response){ console.log("Part3"); }); console.log("Part4"); ,因为它尚未由成功处理程序设置。

基于承诺的异步操作的展示

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*");

pic

" Part4"的控制台日志没有必要等待数据从服务器返回。它在XHR 启动后立即执行。控制台日志为" Part3"在}中保存的成功处理函数内部,在数据从服务器到达并且XHR 完成之后调用

有关详细信息,请参阅$q service

演示



.selectProduct{display:block;}
.selectShippingMethod{display:block;margin:10px 0;}
.total{display:block;margin:10px 0;font-weight:bold;}