RESTAngular:GET请求 - 对象数组

时间:2015-12-25 19:11:10

标签: arrays angularjs playframework request restangular

我试图提出一个简单的获取请求几个小时,但它只是不起作用。 我有一个负责数组的服务,当我定义数组时,我调用我为restAngular函数构建的服务。

第一项服务:

app.factory('ServiceArray',function($filter,restAngularService){

        var Cards = restAngularService.getC();
        console.log(Cards);
return{
            getCards : function(){
                return Cards;
            }
}
//more code...

}

我从console.log

获取未定义

restAngular服务:

 app.factory('restAngularService',function($filter,Restangular){
    var Accounts = Restangular.all('api');
    var baseAccounts = Accounts.one('get');
    return{
        getC : function(){
            var Cards = [];
            if(baseAccounts.get()){
                baseAccounts.getList().then(function(b) {
                    console.log(b.plain());
                    Cards = b.plain();
                    return Cards;

                });

            } else {
                return Cards = [{}];
            }
    }
}

从这个console.log我得到:

[对象,对象]

控制器代码:

$scope.Cards = ServiceArray.getCards();
condole.log($scope.Cards);

我从console.log

获取未定义

1 个答案:

答案 0 :(得分:0)

尝试从你的getC方法返回一个promise:

app.factory('restAngularService',function($filter,Restangular, $q){
    var Accounts = Restangular.all('api');
    var baseAccounts = Accounts.one('get');

    var deferred = $q.defer();

    return{
        getC : function(){
            var Cards = [];
            if(baseAccounts.get()){
                baseAccounts.getList().then(function(b) {
                    console.log(b.plain()[0]);
                    Cards = b.plain()[0];
                    deferred.resolve(Cards);
                });
            } else {
                deferred.resolve([{}]);
            }

           return deferred.promise;
    }
}

然后你在你的控制器中使用这个服务:

var Cards;
restAngularService.getC().then(function(cards){
  Cards = cards;
  console.log(Cards);
});

UPD ,因为您的方法baseAccounts.getList()是异步的,它会返回promise。所以你不能只是同步调用它。所以你打电话给它,并用then添加一个回调。当您的承诺得到解决时(例如,您从网上获取JSON),将执行此回调