有人可以帮助我弄清楚如何在angularjs工厂中返回硬编码数据,如果连接到我的API。我的硬编码数据位于另一个名为“DataFactory”的工厂。欣赏帮助。

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;
        };
.

我的数据签证定义如下:

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;
});
.

有帮助吗?

解决方案

我想认为这是你要找的东西:

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;
        };
.

我已经跳过了任何数据格式和分配细节,因为您可以随意更改它们。通过包裹您的API查询,额外承诺您获得操作返回的内容的能力。如果可以达到您的API,则在解决您的外部承诺中将数据从中返回。否则,您可以在解决您的外部承诺中从您的其他服务返回您的硬编码数据。

其他提示

No catch block, use a regular error callback function:

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

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

                    var data    = null;
                    days    = dataFactory.daysOfWeek;

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

See in the docs:

then(successCallback, errorCallback, notifyCallback) – regardless of when the promise was or will be resolved or rejected, then calls one of the success or error callbacks asynchronously as soon as the result is available. The callbacks are called with a single argument: the result or rejection reason. Additionally, the notify callback may be called zero or more times to provide a progress indication, before the promise is resolved or rejected.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top