Разработка Angularjs застопорилась — вызов $http вместе с $httpBackend

Я занимаюсь разработкой с заглушкой, используя angularjs. Мои заглушки — это файлы JSON на сервере. Итак, я делаю вызовы $http в функции «заглушки», чтобы получить заглушки. Однако, поскольку $http является асинхронным, whenGET все время возвращает пустые данные (он не ждет завершения http). Я изучил текущие вопросы по этому вопросу. Они обеспечивают подход для назначения возвращаемого значения вызова http модели данных области. Я хочу вернуть данные после завершения http-запроса. Ниже приведен код.

stubbedOstnApp.run(['$httpBackend','$http',function($httpBackend, $http){
    var tempData;
    var get = function (){
        return $http.get('../test/data/program-categories.json').then(function(data){
            tempData = data.data;
            console.log(tempData);
            return tempData;
        })
    };
    get();
    console.log(tempData);

    $httpBackend.whenGET('lookup/program-categories').respond(tempData);
    $httpBackend.whenGET(/^views\//).passThrough();
    $httpBackend.whenGET(/^\.\.\/test\/data\//).passThrough();
}]);

По сути, я хочу, чтобы строка whenGET ждала заполнения tempData. tempData внутри функции get регистрируется в консоли после запуска метода whenGET.


person Srik    schedule 25.04.2014    source источник


Ответы (2)


Вы должны заполнить tempData при успешном обратном вызове, который вы предоставляете $http.get

Попробуйте так:

 var get = function (){
    return $http.get('../test/data/program-categories.json').then(function(data){
        tempData = data.data;
        $httpBackend.whenGET('lookup/program-categories').respond(tempData);            
        console.log(tempData);
        return tempData;
    })
};
get();
console.log(tempData);
person spacemigas    schedule 25.04.2014

Для этого вы должны использовать промисы: https://docs.angularjs.org/api/ng/service/$q

Отличное объяснение обещаний здесь: https://stackoverflow.com/questions/12505760/angularjs-processing-http-response-in-service

person NP726    schedule 25.04.2014
comment
Мой текущий код использует обещания. Мне нужно что-то другое. Большинство текущих решений указывают, как заполнить модель данных в $scpe. Я хочу, чтобы некоторые из моих инструкций дождались завершения http. - person Srik; 25.04.2014