Сервис angularjs не ждет завершения функции

0

У меня есть служба, которая не ждет. Функция "Успех" для вызова в контроллере. Компилятор анализирует строки после моего вызова из службы, и это не то, что я хочу. Когда я перехожу в режим отладки, у меня есть мои данные только через 10 мс или что-то в этом роде

.factory('myService', ['$http', '$q', function($http, $q){
var deferObject,
    myMethods = {

        getDepartments: function(d) {
            console.log("Am ajuns");
            var allDepartments=[];
            var promise=$http.get("http://localhost:8087" + "/projects/"+d );
            var deferObject = deferObject || $q.defer();
            console.log("Am ajuns2");
            promise.then(

                // OnSuccess function
                function(answer){
                    console.log("Am ajuns3");
                    // This code will only run if we have a successful promise.
                    deferObject.resolve(answer);
                            var setDepartments = new Set();

                            for (var i = 0; i < answer.data.length; i++) {
                                setDepartments.add(answer.data[i].department);

                            }

                            setDepartments.forEach(function (value) {
                                var department = {name: value};
                                allDepartments.push(department);

                            });
                    console.log(allDepartments);
                    return allDepartments;
                },
                // OnFailure function
                function(reason){
                    // This code will only run if we have a failed promise.
                    deferObject.reject(reason);
                });

            return allDepartments;
        },
        getData: function(d) {
            var promise=$http.get("http://localhost:8087" + "/projects/"+d )
             var deferObject = deferObject || $q.defer();

            promise.then(
                // OnSuccess function
                function(answer){

                    // This code will only run if we have a successful promise.
                    deferObject.resolve(answer);
                },
                // OnFailure function
                function(reason){
                    // This code will only run if we have a failed promise.
                    deferObject.reject(reason);
                });

            return deferObject.promise;
        }

    };

return myMethods;

}]);
  • 0
    как ваши getData, getDepartments должен вернуть обещание.
  • 1
    Почему вы используете один и тот же deferObject для нескольких обещаний? Я могу предвидеть проблему, если вы вызываете оба ваших фабричных метода одновременно, пока оба запроса все еще обрабатываются. Просто перезвони $http . Вы не можете вернуться из обещания. .then этого вызывающий код перешел с момента его инициации. К тому времени, когда обещание разрешается, уже некуда return . Вот почему вы используете обещания везде, а не смешивать и сочетать. Затем, когда вы возвращаетесь с одного обещания, оно передается следующему в цепочке.
Показать ещё 3 комментария
Теги:

1 ответ

0
Лучший ответ

Я решил проблему, используя q.all, которая ждет завершения каждого запроса и только после этого программа идет дальше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню