为什么我的Angular服务不返回数据

时间:2014-04-24 08:25:39

标签: angularjs promise angular-services

我正在为app和内部服务使用https://github.com/StarterSquad/startersquad.github.com/tree/master/examples/angularjs-requirejs-2文件夹结构,我有以下代码:

define(['./module'], function(services) {
'use strict';
services.factory('user_resources', ['$resource', '$location', function($resource, $location) {

        return $resource("", {},
                {
                    'getAll': {method: "GET", url:'JSON/myList.JSON',isArray:true}

                });
    }]);
});

在控制器中我有以下代码:

  define(['./module'],    function (controllers) {
'use strict';
controllers.controller('myListCtrl',['Phone','Phone1','loginForm','$scope','$http','user_resources','CreditCard',function(Phone,Phone1,loginForm,$scope,$http,user_resources,CreditCard){
    console.log(user_resources.getAll())
}]);
});

返回[$ promise:Object,$ resolved:false]如何从中获取数据?

我做了同样的事情 this tutorial,但在我的情况下,它返回promises,在教程中它直接返回数据

3 个答案:

答案 0 :(得分:4)

请注意,$resource会在从服务器检索数据之前立即返回对象。此对象具有名为$promise的属性。当最终从服务器收到响应时,$promise将得到解析,对象现在将包含数据。

在您的情况下,console.log()输出打印它的作用,因为您在服务器有机会响应之前立即访问该对象。

您可以使用$resource返回的对象执行以下操作:

1)在Angular表达式的视图中使用它。当$promise自动解决后,您将无需更新即可更新视图。例如:

控制器:

$scope.users = user_resources.getAll();

HTML:

<ul>
    <li ng-repeat="user in users">{{user.name}}</li>
</ul>

2)使用上面@doodeec建议的then()函数,但语法正确:

user_resources.getAll().$promise.then(function(data) {
    // do something with data
});

答案 1 :(得分:0)

如上所述,从所有$ http服务返回一个promise,您需要处理响应而不是执行。

此处可以看到类似问题和解决方案的示例:http://angularspot.com/topic/11-post-not-returning-data-to-controller

答案 2 :(得分:0)

请记住$ httpBackend.flush(),在此之前不会解决承诺。