编程语言
首页 > 编程语言> > javascript – 范围变量undefined在.then`方法之外

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

作者:互联网

我在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
    }
});

解决方法:

outside … it turned into an undefined variable

它没有“变成”未定义的值.代码中的最后一个console.log在成功处理程序中的console.log之前执行.它未定义,因为它尚未由成功处理程序设置.

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

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完成后调用.

有关更多信息,请参阅How to use $http promise response outside success handler.

演示

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

标签:angular-promise,javascript,scope,angularjs,ajax
来源: https://codeday.me/bug/20191003/1847693.html