Breeze 在本地使用executeQuery/executeQuery作为web服务和缓存之间的中介

Breeze 在本地使用executeQuery/executeQuery作为web服务和缓存之间的中介,breeze,Breeze,我是breeze.js的新手,在想出一种将executeQuery和executequerylocal结合起来的好方法时遇到了一些困难 用例是这样的:我想使用breeze数据缓存来隐藏第三方web服务的脆弱性。我想提出一种模式,查询服务,如果调用时服务不可用,则返回缓存 我已经细细琢磨了好几天了——任何建议都将不胜感激 我认为这是一个好办法: executeQuery= function(query){ operating(true); return manager.execut

我是breeze.js的新手,在想出一种将
executeQuery
executequerylocal
结合起来的好方法时遇到了一些困难

用例是这样的:我想使用breeze数据缓存来隐藏第三方web服务的脆弱性。我想提出一种模式,查询服务,如果调用时服务不可用,则返回缓存


我已经细细琢磨了好几天了——任何建议都将不胜感激

我认为这是一个好办法:

executeQuery= function(query){
    operating(true);
    return manager.executeQuery(query).fail(fail);

    function fail(error){
        //You can decide if you want to query locally depending on the type of error
        //Example: if(error.status===404) ;
        return executeQueryLocally(query);
    }

}

executeQueryLocally= function(query){

    return manager.executeQuery(query).using(FetchStrategy.FromLocalCache).fail(fail);

    function fail(error){
        //You can't get the information, so you can throw an error
        //Or that you want

        throw Error('Impossible to get the requested data');
    }
}

//Example calling this methods
var getCustomers= function(resultArrayObservable,inlineCountObservable){
        var query = new breeze.EntityQuery("Customers").inlineCount(true);
        return executeQuery(query).then(success);

        function success(data){
            inlineCountObservable(data.inlineCount);
            resultArrayObservable(standarizeCustomerDtos(mapCustomerDtosToKos(data.results)));
        }

};
有了这个解决方案,我试着简单地检查每个查询是否出错,并且不重复代码

我希望这能帮助你