0

我已经阅读了多篇关于$promise在 AngularJS 中使用的文章,但我仍然无法弄清楚为什么我在下面的代码中出现错误:

控制器代码:

eventsApp.controller('EventController',
    function EventController($scope, eventData) {
        $scope.sortOrder = 'name';
        eventData.getEvent().$promise.then(successOnGetEvent(event), errorOnGetEvent(response));

        function successOnGetEvent(event) {
            $scope.event = event;
            console.log(event);
        };

        function errorOnGetEvent(response) {
            console.log(response)
        };
    });

服务代码:

eventsApp.factory('eventData', function($resource) {
    return {
        getEvent: function() {
            return $resource('/data/event/:id', {id:'@id'}).get({id:1});
        }
    }
});

在 Chrome 控制台窗口中,我收到错误消息:

ReferenceError:未定义响应

4

2 回答 2

2

您实际上是将函数的返回值传递给promise.then. 你应该传递一个函数。尝试这个:

eventsApp.controller('EventController',
    function EventController($scope, eventData) {
        $scope.sortOrder = 'name';
        eventData.getEvent().$promise.then(function (event) { successOnGetEvent(event); }, function (response) { errorOnGetEvent(response); });

        function successOnGetEvent(event) {
            $scope.event = event;
            console.log(event);
        };

        function errorOnGetEvent(response) {
            console.log(response)
        };
});

我所做的只是添加一个包装匿名函数来运行您打算运行的代码。这意味着promise.then将收到一个功能。

于 2014-06-26T07:03:42.613 回答
2

在这一行...

eventData.getEvent().$promise.then(successOnGetEvent(event), errorOnGetEvent(response));

successOnGetEventerrorOnGetEvent立即被处决。错误是因为response(and event) 未在此上下文中声明。尝试只传递函数...

eventData.getEvent().$promise.then(successOnGetEvent, errorOnGetEvent);
于 2014-06-26T07:07:14.010 回答