0

我正在为应用程序和内部服务使用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] 如何从中获取数据?

我做了与 本教程中相同的事情,但在我的情况下它返回承诺,在教程中它直接返回数据

4

3 回答 3

4

请注意,$resource在从服务器检索数据之前,a 会立即返回一个对象。该对象有一个名为 的属性$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)使用then()上面@doodeec建议的函数,但语法正确:

user_resources.getAll().$promise.then(function(data) {
    // do something with data
});
于 2014-04-24T09:03:38.237 回答
0

如前所述,所有 $http 服务都会返回一个承诺,您需要处理响应而不是执行。

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

于 2014-05-02T17:30:09.680 回答
0

记住 $httpBackend.flush(),promise 直到那时才会被解决。

于 2014-08-30T03:22:04.190 回答