Я занимаюсь незавершенной разработкой с использованием 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.

1
Srik 25 Апр 2014 в 22:52

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);
1
spacemigas 25 Апр 2014 в 19:26

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

Отличное объяснение обещаний здесь: Обработка ответа $ http в службе

0
Community 23 Май 2017 в 10:26