• AngularJS中的$http缓存以及处理多个$http请求


    在AngularJS的实际项目中,经常需要处理多个$http请求,每个$http请求返回一个promise,我们可以把多个promise放到$q.all()方法接受的一个数组实参中去。

    ■ 处理多个$http请求

    angular.module('app',[])
        .controller('AppCtrl', function AppCtrl(myService){
            var app = this;
            
            myService.getAll().then(function(info){
                app.myInfo = info;
            })
        })
        .service('myService', function MyService($http, $q){
            var myService = this;
                user = 'https://api...',
                repos = '',
                events = '';
            
            myService.getData = function getData(){
                return $http.get(user).then(function(userData){
                    return {
                        name:userData.data.name,
                        url:userData.data.url,
                        repoCount: userData.data.count
                    }
                })
            };
            
            myService.getUserRepos = function getUserRepos(){
                return $http.get(repos).then(function(response){
                    return _.map(response.data, function(item){
                        return {
                            name: item.name,
                            description:item.description,
                            starts: item.startCount
                        }
                    })
                })
            }
            
            myService.getUserEvents = function getUserEvents(){
                ...
            }
            
            myService.getAll = function(){
                var userPromise = myService.getData(),
                    userEventsPromise = myService.getUserRepos(),
                    userReposPromise = myService.getUserRepos();
                    
                return $q.all([userPromise, userEventsPromise, userReposPromise]).then(function(){
                    ....
                })
            }
        })

    ■ $http请求缓存

    $http的get方法第二个形参接受一个对象,该对象的cache字段可以接受一个bool类型实现缓存,即{cache:true},也可以接受一个服务。

    通过factory方式创建一个服务,并把该服务注入到controller中去。

    angular.module('app',[])
        .factory("myCache", function($cacheFactory){
            return $cacheFactory("me");
        })
        .controller("AppCtrl", function($http, myCache){
            var app = this;
            app.load = function(){
                $http.get("apiurl",{cache:myCache})
                    .success(function(data){
                        app.data = data;
                    })
            }
            
            app.clearCache = function(){
                myCache.remove("apiurl");
            }
        })

    以上,

    ● 实际上,实现缓存机制的是$cacheFactory
    ● 通过{cache:myCache}把缓存机制放在当前请求中
    ● $cacheFactory把请求api作为key,所以清楚缓存的时候,也是根据这个key来清除缓存

  • 相关阅读:
    第六章:单元测试框架unittest
    Jenkins 使用 war包安装时,如果出现报离线错误解决方法
    Appium自动化封装教案
    yaml文件读取(5.1之前与5.1之后对比)
    appium-desktop配置运用方法
    postwoman 配置
    jwt解析
    pytest
    centos安装python3.8
    linux 查找命令
  • 原文地址:https://www.cnblogs.com/darrenji/p/5184015.html
Copyright © 2020-2023  润新知