在工厂归还承诺

时间:2015-12-11 10:18:36

标签: javascript angularjs

我有一个工厂,我希望在函数中返回一个承诺,但我的控制器每次都会说:

(function () {
        'use strict';
        angular
            .module('testApp')
            .factory('personFactory', personFactory);

        personFactory.$inject = ['storage'];


        function personFactory(storage) {

            storage.getData().then(function (response) {

                return {
                    allData: function () {
                        return response
                    }
                }

            });
        }

    })();

我的工厂:

(function () {
    'use strict';

    angular
        .module('testApp')
        .controller('menuListController', menuListController);

    menuListController.$inject = ['$scope', 'personFactory', '$rootScope'];

    function menuListController($scope, personFactory) {

        $scope.fromFactory = personFactory.allData();

        console.log($scope.fromFactory)
    }
})();

我的控制器:

mysql

我认为我必须双重返回这两个函数,但是如果这是问题,也无法在控制器中调用它。

1 个答案:

答案 0 :(得分:2)

你的工厂定义必须返回一些东西,这就是问题所在:

    function personFactory(storage) {

        return storage.getData().then(function (response) {

            return {
                allData: function () {
                    return response
                }
            }

        });
    }

现在,我不知道这是不是你真正需要的。我通常在工厂中返回一个函数或对象,然后我使用它。

使用您的方法,您只需调用一次getData并直接在控制器中接收承诺。

我喜欢它,现在我想起来了:)

但是!看看你的其余代码,我认为你毕竟不会期望得到承诺。 无论如何你必须做这样的事情:

personFactory.then(function () {
    $scope.fromFactory = data.allData();
});

这又让我觉得你不需要那样做allData业务。这就是我要做的事情:

function personFactory(storage) {
    return storage.getData();
}

personFactory.then(function (response) {
    $scope.fromFactory = response;
});

看起来如何?

相关问题