如何通过一种方法来获得由服务和$ cacheFactory数据 [英] How to get data by service and $cacheFactory by one method

查看:125
本文介绍了如何通过一种方法来获得由服务和$ cacheFactory数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个工厂,从服务器获取数据。在工厂方法我用$ cacheFactory缓存获取数据。我的code是如下。

I have a factory which get data from server. In the factory method I have used $cacheFactory to cache getting data. My code is as follows..

    var buyersService = function ($http, $q,$cacheFactory) {
            var serviceBase = '/api/OMData/';
            var  BuyersFactory = {};
            buyersService.cache = $cacheFactory('cacheId');

            BuyersFactory.GetBuyers = function () {
              var dataList =  buyersService.cache.get('BuyerData');
              if (dataList != null && dataList.length > 0) {
                  return dataList;
              }
              else {
                  return $http.get(serviceBase + 'GetBuyers').then(
                   function (results) {
                       buyersService.cache.put("BuyerData", results.data);
                       return results.data;
                   });
              }

            }

    app.factory('OMDataService', ['$http', '$q', '$cacheFactory', buyersService]);

});

从控制器现在我已经叫GetBuyers方法。我的方法是像下面..

Now I have called GetBuyers method from controller. My method is like below..

  var BuyerController = function ($scope, BuyersService) {

        $scope.Buyers = [];
        init();
        function init() {
            getBuyers();
        }
        function getBuyers() {
            BuyersService.GetBuyers()
                .then(function (data) {
                    $scope.Buyers = data;
                }, function (error) {
                    alert(error.message);
                });
        }

    };
    app.register.controller('BuyersController', ['$scope', 'OMDataService', BuyerController]);

当我已执行我的控制器方法,第二次我有在承诺部分的错误消息。
对象不支持属性或方法,然后

When I have executed my controller method second time I have got an error message in promise part. Object doesn't support property or method 'then'

推荐答案

这里的问题是,你的函数返回两个不同的东西:要么承诺或纯数据。为了解决这个问题,使用另一个许控制流量,并返回一个作为函数的结果。

The issue here is that your function returns two different things: either a promise or plain data. To remedy this, use another promise to control the flow and return that one as the result of the function.

更新您的code到

var buyersService = function ($http, $q,$cacheFactory) {
            var serviceBase = '/api/OMData/';
            var  BuyersFactory = {};
            buyersService.cache = $cacheFactory('cacheId');

            BuyersFactory.GetBuyers = function () {
              var buyersDataIsAvailable = $q.defer();
              var dataList =  buyersService.cache.get('BuyerData');
              if (dataList != null && dataList.length > 0) {
                  buyersDataIsAvailable.resolve(dataList);
              }
              else {
                  $http.get(serviceBase + 'GetBuyers').then(
                   function (results) {
                       buyersService.cache.put("BuyerData", results.data);
                       buyersDataIsAvailable.resolve(results.data);
                   });
              }
              return buyersDataIsAvailable.promise;
            }

    app.factory('OMDataService', ['$http', '$q', '$cacheFactory', buyersService]);

});

这篇关于如何通过一种方法来获得由服务和$ cacheFactory数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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