【问题标题】:angularJs Factory .then() is not a functionangularJs Factory .then() 不是函数
【发布时间】:2019-02-07 20:31:08
【问题描述】:

我正在使用 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;

        })

它也不起作用。不是双发,真的不行。

编辑:谢谢 Frank Modica,现在已解决:

我已经像这样改变了我的工厂(请注意 $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() 正确返回了我的对象!

【问题讨论】:

    标签: angularjs factory


    【解决方案1】:

    如果你想把它变成一个异步方法,你需要返回一个promise。注入$q 服务并执行:

    return $q.resolve(equipe);
    

    如果您稍后将其更改为 HTTP 调用,则无需手动创建 Promise。 $http 服务会为你做这件事,所以你可以这样做:

    return $http.get(...);
    

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

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

    【讨论】:

    • 谢谢,第一行在哪里加,在工厂里面?
    • 需要在工厂内部注入$q服务吗?
    • 好的,我没有再收到错误信息了,谢谢!
    猜你喜欢
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 2019-02-10
    • 2020-11-12
    • 1970-01-01
    相关资源
    最近更新 更多