首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在我的控制台尝试实现角缓存(Ionic)时出错

在我的控制台尝试实现角缓存(Ionic)时出错
EN

Stack Overflow用户
提问于 2015-11-15 17:23:42
回答 1查看 98关注 0票数 0

我正在从事一个离子型项目,并试图用角缓存实现缓存。实现了角缓存,现在当我运行它时,我从控制器中得到一个错误,但是我看不到控制器代码中有任何错误。

我的app.js代码的一部分:

代码语言:javascript
复制
angular.module('Chemicar', ['ionic','ChemicarProduct.controllers', 'ChemicarProduct.services', 'angular-cache'])

.run(function($ionicPlatform, CacheFactory) {
  $ionicPlatform.ready(function() {
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
    // for form inputs)
    if(window.cordova && window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);

    }
    if(window.StatusBar) {
      StatusBar.styleDefault();
    }

    CacheFactory("productsCache", { storageMode: "localStorage", maxAge: 5000, deletionOnExpire: "aggressive"});

  });
})

我的service.js代码:

代码语言:javascript
复制
angular.module('ChemicarProduct.services', [])

.service('ChemicarProductService', function($http, $q, CacheFactory){

    var url1 = "XXXXXXXXX";    
    var productsCache = CacheFactory.get('productsCache');

    var self = {
        'products' : [],
        'loadProducts' : function(){    
            var d = $q.defer(),
                cacheKey = "products",
                productsData = productsCache.get(cacheKey);

            if(productsData){
                console.log("Found data inside cache" , productsCache);
                d.resolve(productsCache);
            }
            else{
                $http.get(url1)
                .success(function(data){
                    self.products = data;
                    console.log("Received data via http " , self.products);
                    productsCache.put(cacheKey, self.products);
                    d.resolve(data);
                })
                .error(function(msg){
                    console.log("Error while making http call " , msg);
                    d.reject("The promise was not fulfilled", data);
                });
                return d.promise;
            }     
        }
    };
    return self;
});

我的controller.js代码:

代码语言:javascript
复制
angular.module('ChemicarProduct.controllers', ['ChemicarProduct.services'])

.controller('ProductCtrl', function($scope, ChemicarProductService, $ionicLoading){

    $scope.productItems = [];
    $ionicLoading.show({template: "Loading..."});

    ChemicarProductService.loadProducts().then(function success(data){
        console.log(data);
        $scope.productsItems = ChemicarProductService.products;
        console.log('&&&&&&&&' , $scope.productItems);
        $ionicLoading.hide();
    },
    function error (data){
        console.log(data)
    });   

})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-15 17:31:55

在服务中,只有当return d.promise;返回false时才调用false

这就是为什么ChemicarProductService.loadProducts()不返回承诺的原因之一:

无法读取未定义的属性“则”

改为:

代码语言:javascript
复制
.service('ChemicarProductService', function($http, $q, CacheFactory){

    var url1 = "XXXXXXXXX";    
    var productsCache = CacheFactory.get('productsCache');

    var self = {
        'products' : [],
        'loadProducts' : function(){    
            var d = $q.defer(),
                cacheKey = "products",
                productsData = productsCache.get(cacheKey);

            if(productsData){
                console.log("Found data inside cache" , productsCache);
                d.resolve(productsCache);
            }
            else{
                $http.get(url1)
                .success(function(data){
                    self.products = data;
                    console.log("Received data via http " , self.products);
                    productsCache.put(cacheKey, self.products);
                    d.resolve(data);
                })
                .error(function(msg){
                    console.log("Error while making http call " , msg);
                    d.reject("The promise was not fulfilled", data);
                });
                //return d.promise;
            }

           return d.promise;      // <---- fix
        }
    };
    return self;
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33722590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档