我得到了一个Promise而不是一个集合因此错误 - > [filter:notarray]预期数组但收到:{}:

时间:2016-09-25 10:08:03

标签: angularjs promise

我有这个工厂:

(function () {

    angular.module('appContacts')
        .factory('dataService', ['$q', '$http', dataService]);

    function dataService($q, $http) {

        return {
            getAllOrganizations: getAllOrganizations,
            getAllContacts: getAllContacts,
        };

        function getAllContacts() {

            return $http({
                method: 'GET',
                url: 'api/allcontacts'
            })
        }

        function getAllOrganizations() {

            return $http({
                method: 'GET',
                url: 'api/organizations'
            })
        }
    }

})();

我有这个控制器:

(function () {

    "use strict";

    angular.module('appContacts')
        .controller('contactsController', function contactsController($http, dataService) {

            var vm = this;
            vm.organizations = [];
            vm.allcontacts = [];

            vm.organizations = dataService.getAllOrganizations(); 
            vm.allcontacts = dataService.getAllContacts(); 

    });

})();

如果我在控制器中创建一个console.log console.log(dataService.getAllOrganizations())和console.log(dataService.getAllContacts())我看到我有一个 PROMISE 因此我得到一个错误 [filter:notarray]预期的数组但收到:{}:

我怎么能在一个真正的错误中转换这个承诺,我可以分配给变量,如:

vm.organizations = dataService.getAllOrganizations()

vm.allcontacts = dataService.getAllContacts();

1 个答案:

答案 0 :(得分:0)

您的服务以承诺回报。因此,您需要使用控制器中的然后语法解析承诺,以便从服务器获取数据。你需要这样的东西:

dataService.getAllOrganizations().then(function(result){
  vm.organizations = result;
}, function(error){
  console.log(error);
});

为了默认进行通话,您需要一个方法,我们称之为activate()。我不确定语法是否正确,我把它写在了我的头顶。

请查看John Papa的风格指南here

(function () {

    "use strict";

    angular.module('appContacts')
        .controller('contactsController', function contactsController($http, dataService) {

            var vm = this;
            vm.organizations = [];
            vm.allcontacts = [];

            var activate = function activate() {
              dataService.getAllOrganizations().then(function(result){
                vm.organizations = result;
              }, function (error){});

              dataService.getAllContacts().then(function(result){
                vm.allcontacts = result;
              }, function (error){});
            }

            activate();

    });

})();