Angular $HTTP и Promise

Я не могу заставить работать свое обещание внутри функции HTTP.get. Когда я пытаюсь вывести вывод console.log, все, что я получаю, это функция обещания?

Я заинтересован в получении массива событий, предоставленных моим API.

eventApp.factory('LoadEvents', function($http, $q) {
        var LoadEvents = function() {
            this.events = [];
            this.busy = false;
            this.after = '';
        };

        LoadEvents.prototype.nextPage = function() {
            if (this.busy) return;
            this.busy = true;

             var defer = $q.defer();

             $http.get('URL inserted here').then(function(response){
                 defer.resolve(response.data);
             });

             this.events = this.events.concat(defer.promise);


            console.log(this.events);
        };

Это должно быть очень простое обещание, но я не могу понять, почему я не могу получить массив вместо всей функции обещания?


person Saggo    schedule 15.08.2014    source источник
comment
Вероятно, потому что вы регистрируете обещание до того, как оно будет назначено событиям.   -  person cbass    schedule 15.08.2014
comment
Вы не можете получить массив, так как он загружается асинхронно! Обещание не является ценностью.   -  person Bergi    schedule 15.08.2014
comment
Хорошо, я понимаю. Но я действительно не понимаю, как я могу внутри функции $http.get установить this.events на полученные данные от API?   -  person Saggo    schedule 15.08.2014
comment
$http возвращает обещание. Вы можете просто использовать его вместо создания нового.   -  person TrazeK    schedule 15.08.2014


Ответы (1)


По массиву событий (т.е. this.event), если вы хотите иметь в виду массив обещаний, он должен быть таким

this.events = this.events.concat([defer.promise]); или this.events = this.events.push(defer.promise), затем используйте $q.all(this.events).then(...), чтобы решить все проблемы.

person Kamrul    schedule 15.08.2014