RESTAngular:GET 请求 - 对象数组

RESTAngular: GET request - objects array

我试图发出几个小时的简单获取请求,但它无法正常工作。 我有一个负责数组的服务,当我定义数组时,我调用了为 restAngular 函数构建的服务。

第一个服务:

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

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

}

我从 console.log

得到 undefined

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

得到 undefined

尝试从您的 getC 方法中 return 承诺,如下所示:

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() 是异步的,所以 return 是承诺。所以你不能只是同步调用它。所以你调用它,并用 then 添加一个回调。当你的承诺被解决时,这个回调将被执行(例如你从网上得到你的JSON)