$ q不会异步工作

时间:2016-10-13 14:04:18

标签: javascript angularjs promise

我正在使用(function ( $ ) { $.fn.test = function() { setInterval(hi.call(this), 1000); function hi(){ console.log(this); } }; }( jQuery )); $('div').test(); promise进行异步调用。但它没有用。

eventData.js

$q

EventContrller.js

angular.module('eventsApp').factory('eventData'  , function($http ,$q, $log) {
    return {

        getEvent : function() {

            var deferred = $q.defer()
            $http({method: 'GET', url: 'http://localhost:8080/springhibernateangularjs/service/events'}).
                then(
    function(response){
                    deferred.resolve(response.data);
                    console.log("succccccc");
                },
    function(error){

                    console.log("faiiiiiiil");
        deferred.reject(status);
                });
            return deferred.promise ;
        }
    };
});

$scope.event = eventData.getEvent(); 未正确加载!

2 个答案:

答案 0 :(得分:3)

这是您获取数据的方式,因为您返回的是承诺而不是结果:

eventData.getEvets().then(function(result){
       $scope.event = result;
    })

答案 1 :(得分:3)

由于$q.defer服务已经返回承诺,因此无需使用$http制作承诺。

app.factory('eventData'  , function($http) {
    return {

        getEvent : function() {
            //RETURN http promise
            return $http.get('http://localhost:8080/springhibernateangularjs/service/events').
                then(function(response){
                    console.log("succccccc");
                    //return to chain data
                    return response.data;
                },
                function(error){    
                    console.log("faiiiiiiil");
                    //throw to chain rejection
                    throw error;
                });
        }
    };
});

在控制器中:

eventData.getEvent().then(function(data){
    $scope.event = data;
});