angularJs Factory .then()不是函数

时间:2019-02-07 20:31:08

标签: angularjs factory

我正在使用angularJs v1.7

我需要从工厂加载对象,这工作得很好:

$scope.equipe = equipesFactoryLocalStorage.getEquipeMomentanee();

现在,我需要添加一个.then(),因为在对象加载后,我需要做一些事情:

equipesFactoryLocalStorage.getEquipeMomentanee().then(function(response){
        $scope.equipe = response;

    })

AngularJs在控制台内部提供了此错误:

TypeError: "equipesFactoryLocalStorage.getEquipeMomentanee(...).then is not a function"

我已经为此苦苦挣扎了,请帮帮我。

这是我的工厂:

monApp.factory('equipesFactoryLocalStorage',function(){

    var factory = {};

    /* Charger une equipe momentanee */
    factory.getEquipeMomentanee = function(equipe){

        if(JSON.parse(localStorage.getItem("equipe"))!=null){

            var equipe  =  JSON.parse(localStorage.getItem("equipe"));


        }
        else{
            var equipe  =  {};
            equipe.attaquants           = [];
            equipe.ailiers_gauche       = [];
            equipe.attaquants_soutien   = [];
            equipe.ailiers_droits       = [];
            equipe.milieu_gauche        = [];
            equipe.milieu_soutien       = [];
            equipe.milieu_droit         = [];
            equipe.defense_gauche       = [];
            equipe.defense_soutien      = [];
            equipe.defense_droit        = [];
            equipe.liberos              = [];
            equipe.goal                 = [];
            equipe.img                  = "img/new.png";
            equipe.date_creation        = new Date();



        }

        return equipe ;

    }


    return factory
})  

请帮助我,我不明白为什么.then()无法运行,而没有.then()则无法运行 我已经尝试过angularjs 1.5,并且有相同的错误。

我已经看过几篇有关此的帖子,没有人在工作,我已经尝试过了:

   equipesFactoryLocalStorage.getEquipeMomentanee().$promise.then(function(response){
            $scope.equipe = response;

        })

它也不起作用。这不是重复的帖子,它实际上是行不通的。

编辑:谢谢弗兰克·莫迪卡,现在已解决:

我已经这样改变了我的工厂(请注意$ q):

 monApp.factory('equipesFactoryLocalStorage',function($q){

        var factory = {};

        /* Charger une equipe momentanee */
        factory.getEquipeMomentanee = function(equipe){

            if(JSON.parse(localStorage.getItem("equipe"))!=null){

                var equipe  =  JSON.parse(localStorage.getItem("equipe"));


            }
            else{
                var equipe  =  {};
                equipe.attaquants           = [];
                equipe.ailiers_gauche       = [];
                equipe.attaquants_soutien   = [];
                equipe.ailiers_droits       = [];
                equipe.milieu_gauche        = [];
                equipe.milieu_soutien       = [];
                equipe.milieu_droit         = [];
                equipe.defense_gauche       = [];
                equipe.defense_soutien      = [];
                equipe.defense_droit        = [];
                equipe.liberos              = [];
                equipe.goal                 = [];
                equipe.img                  = "img/new.png";
                equipe.date_creation        = new Date();



            }

            return $q.resolve(equipe);

        }


        return factory
    })  

现在,它运行良好,.then()正确返回了我的对象!

1 个答案:

答案 0 :(得分:1)

如果要将其转换为异步方法,则需要返回一个Promise。注入$q服务并执行:

return $q.resolve(equipe);

如果以后将其更改为HTTP调用,则无需手动创建Promise。 $http服务将为您做到这一点,因此您可以这样做:

return $http.get(...);

但是,如果您不需要将此作为异步方法,则不需要诺言。您可以按原样保留服务,然后执行以下操作:

$scope.equipe = equipesFactoryLocalStorage.getEquipeMomentanee();
// Do something else