在有角度的服务电话中,第一次发出没有获得价值?

时间:2016-11-08 12:04:57

标签: javascript jquery angularjs

Here Demo Link

Here我附上了服务电话的示例程序。因为Am面临的问题第一次没有得到正确的价值。

第一次调用:

enter image description here

第二次或更多次调用:

enter image description here

我可以知道这是什么问题吗?并帮我解决 为什么count先执行count而datalength执行第二次?

1 个答案:

答案 0 :(得分:0)

默认情况下,

$http.get正在调用异步。我们必须使用promise来使其同步。使用此更新代码请参阅Plunker

var app = angular.module('myApp', []);

app.controller('myCtrl', ['$scope', '$location', '$filter', 'sampleService', '$http', function ($scope, $location, $filter, sampleService, $http) {
    $scope.getCount = function () {
        sampleService.getFile().then(function (data) {
            var dt = data.PRTGetSlotsBySessionResult;
            var count = $filter('filter')(dt, { "N": null });
            alert(JSON.stringify(count.length));
        });
    }
}]);

app.factory('sampleService', ['$http', '$filter', '$q', function ($http, $filter, $q) {

    return {
        object: '',
        makeRequest: function (url) {
            // Create the deffered object
            var deferred = $q.defer();
            $http.get(url).then(function (resp) {
                deferred.resolve(resp.data);
            });

            return deferred.promise;
        },
        getFile: function () {
            if (!this.object) {
                this.object = this.makeRequest("file.json");
            }
            // Return the myObject stored on the service
            return this.object;
        }
    };
}]);