Javascript AngularJS:控制器指令中未定义的变量

Javascript AngularJS:控制器指令中未定义的变量,javascript,angularjs,Javascript,Angularjs,大家好,我是AngularJS的新手,我正在学习制定指令 这是指令中的控制器功能: controller: function ($scope,$attrs) { Live($attrs.building, $attrs.sensor).success(function (response) { $scope.value = response; console.log($scope.value); //firs

大家好,我是AngularJS的新手,我正在学习制定指令

这是指令中的控制器功能:

controller: function ($scope,$attrs) {
            Live($attrs.building, $attrs.sensor).success(function (response) {
                $scope.value = response;
                console.log($scope.value); //first console log
            });
            console.log($scope.value); //second console log
        }  
angular.module('app.directives.chart', []).directive('chartlive', function ($http, Live) {
    return {
        restrict: 'E',
        scope: {
            building: '@',
            sensor : '@'
        },
        controller: function ($scope,$attrs) {
            Live($attrs.building, $attrs.sensor).success(function (response) {
                $scope.value = response;
                console.log($scope.value);
            });
            console.log($scope.value);
        }

    }

});
我有两个问题。
第一个是为什么第二个控制台日志出现在第一个控制台日志的第一个?(请注意,Live是我提供的一项服务,它正在工作。)。我的第二个问题是为什么第一个控制台日志返回一个值,而第二个控制台日志返回未定义的值?
我猜指令代码比服务代码先编译,对吗

指令.js

controller: function ($scope,$attrs) {
            Live($attrs.building, $attrs.sensor).success(function (response) {
                $scope.value = response;
                console.log($scope.value); //first console log
            });
            console.log($scope.value); //second console log
        }  
angular.module('app.directives.chart', []).directive('chartlive', function ($http, Live) {
    return {
        restrict: 'E',
        scope: {
            building: '@',
            sensor : '@'
        },
        controller: function ($scope,$attrs) {
            Live($attrs.building, $attrs.sensor).success(function (response) {
                $scope.value = response;
                console.log($scope.value);
            });
            console.log($scope.value);
        }

    }

});
Service.js

app.factory('Live', function ($http) { 
    return function(ip,name){
         return $http({
            method: 'GET',
            url: 'http://193.136.40.6/Rest/RestService.svc/Rest/Live/' + ip + '/' + name,
           params: { ip:ip,name:name }
         });

    }
});

这两个问题的答案是:异步执行。。。欢迎使用javascript…:)有什么好的做法可以解决这个问题吗?@JoséPedroBrito你应该使用回电或承诺。。。看看这个,现在忽略“回调地狱”的那一部分。使用回调(你已经在成功调用中使用了oone)。。。对我来说,这不是一个‘问题’…:)非常感谢,这真的帮助了我,我将学习更多并改进我的代码…:)