angularjs处理$资源$诺错误 [英] angularjs handling $resource $promise errors

查看:190
本文介绍了angularjs处理$资源$诺错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人能帮助我弄清楚如何在我的AngularJS厂返回硬codeD数据,如果有连接到我的API错误。我硬codeD数据位于另一家工厂叫的DataFactory。鸭preciate协助。

  service.factory(ScheduleFactory,['$ HTTP,$资源','$ Q','的DataFactory',函数($ HTTP,$资源,$ Q ,的DataFactory){
        变种objFactory = {};        objFactory.getDaysOfWeek =功能(includeWeekends){
            VAR天= [];
            VAR API = $资源(restURL +'/ daysOfWeek /');            API.query()
                。$承诺
                    。然后(功能(数据){
                        的isEmpty =(data.length === 0);                        如果(!的isEmpty){
                            天=数据;
                        };
                    })
                    .catch(功能(错误){
                        的console.log(拒绝+ JSON.stringify(错误));                        VAR数据= NULL;
                        天= dataFactory.daysOfWeek;                        的console.log(days.length); //返回5
                    });
            的console.log(后承诺+ days.length); 承诺后0'//返回            回天;
        };

我的DataFactory定义如下:

  dataApp.factory(的DataFactory功能(){
    objDataFactory = {};    objDataFactory.daysOfWeek = [
        {DAYNAME:'星期一'
            ,dayAbbrev:星期一
            ,索引:1
            ,isSelected:假的
            ,isWeekday:真正}
        {DAYNAME:星期二
             ,dayAbbrev:'星期二'
             ,指数:2
             ,isSelected:假的
             ,isWeekday:真正}
        {DAYNAME:周三
             ,dayAbbrev:星期三
             ,指数:3
             ,isSelected:假的
             ,isWeekday:真正}
        {DAYNAME:周四
             ,dayAbbrev:星期四
             ,指数:4
             ,isSelected:假的
             ,isWeekday:真正}
        {DAYNAME:'星期五'
             ,dayAbbrev:'星期五'
             ,指数:5
             ,isSelected:假的
             ,isWeekday:真正}
    ];    返回objDataFactory;
});


解决方案

我想,认为这是你在找什么:

  service.factory(ScheduleFactory,['$ HTTP,$资源','$ Q','的DataFactory',函数($ HTTP,$资源,$ Q ,的DataFactory){
     变种objFactory = {};     objFactory.getDaysOfWeek =功能(includeWeekends){
          VAR API = $资源(restURL +'/ daysOfWeek /'),defObj = $ q.defer();          变种daysQuery = API.query();
          daysQuery。$ promise.then(功能(数据){
                    //你可以在这个函数内添加任何其他你想
                    defObj.resolve(数据);
               },功能(错误){
                    //你可以在这个函数内添加任何其他你想
                    defObj.resolve(dataFactory.daysOfWeek);
               });            返回defObj.promise;
        };

我已经跳过任何数据格式和分配细节,因为你承担反正改变他们。通过在一个额外的承诺,您的包裹API查询你获得操纵返回什么的能力。如果您的API能够达成,你在外面的承诺的分辨率从返回的数据。否则,你从其他的服务回报您的外承诺的分辨率您辛苦codeD数据。

Could somebody help me figure out how to return hard-coded data in my AngularJS factory if there is an error connecting to my API. My hard-coded data are located in another factory called "dataFactory". Appreciate the assistance.

service.factory("ScheduleFactory", ['$http', '$resource', '$q', 'dataFactory', function($http, $resource, $q, dataFactory) {
        var objFactory = {};

        objFactory.getDaysOfWeek = function(includeWeekends) {
            var days = [];
            var API  = $resource(restURL + '/daysOfWeek/');

            API.query()
                .$promise
                    .then(function(data) {
                        isEmpty = (data.length === 0);

                        if (!isEmpty) {
                            days    = data;
                        };
                    })
                    .catch(function(error) {
                        console.log("rejected " + JSON.stringify(error));

                        var data    = null;
                        days    = dataFactory.daysOfWeek;

                        console.log(days.length); // returns 5
                    });


            console.log("after promise " + days.length);  // returns 'after promise 0'

            return days;
        };

My dataFactory is defined as follows:

dataApp.factory("dataFactory", function() {
    objDataFactory  = {};

    objDataFactory.daysOfWeek = [
        {   dayName:        'Monday'
            , dayAbbrev:    'Mon'
            , index:        1
            , isSelected:   false
            , isWeekday:    true    }
        , { dayName:        'Tuesday'
             , dayAbbrev:   'Tue'
             , index:       2
             , isSelected:  false
             , isWeekday:   true    }
        , { dayName:        'Wednesday'
             , dayAbbrev:   'Wed'
             , index:       3
             , isSelected:  false
             , isWeekday:   true    }
        , { dayName:        'Thursday'
             , dayAbbrev:   'Thu'
             , index:       4
             , isSelected:  false
             , isWeekday:   true    }
        , { dayName:        'Friday'
             , dayAbbrev:   'Fri'
             , index:       5
             , isSelected:  false
             , isWeekday:   true    }
    ];

    return objDataFactory;
});

解决方案

I'd like to think this is what you are looking for:

service.factory("ScheduleFactory", ['$http', '$resource', '$q', 'dataFactory', function($http, $resource, $q, dataFactory) {
     var objFactory = {};

     objFactory.getDaysOfWeek = function(includeWeekends) {
          var API  = $resource(restURL + '/daysOfWeek/'), defObj = $q.defer();

          var daysQuery = API.query();
          daysQuery.$promise.then(function(data) {
                    //you can add anything else you want inside this function
                    defObj.resolve(data);
               }, function(error) {
                    //you can add anything else you want inside this function
                    defObj.resolve(dataFactory.daysOfWeek);
               });

            return defObj.promise;
        };

I've skipped any data formatting and assignment details because you're liable to change them anyway. By wrapping your API query in an extra promise you gain the ability to manipulate what is returned. If your API can be reached, you return the data from it in the resolution of your outer promise. Otherwise, you return your hard-coded data from your other service in the resolution of your outer promise.

这篇关于angularjs处理$资源$诺错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆