3

我是微风.js 的新手,想出一个很好的方法来组合executeQueryexecuteQueryLocally.

用例是这样的:我想使用微风数据缓存来隐藏第 3 方 Web 服务的脆弱性。我想提出一个模式来查询服务并在调用时服务不可用时回退到缓存。

我已经咀嚼了几天了 - 任何建议或建议将不胜感激!

4

1 回答 1

2

我认为这个解决方案可能是一个好方法:

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

};

使用此解决方案,我试图轻松检查每个查询是否有问题,而不是重复代码。

我希望这可以帮助你。

于 2013-04-27T12:03:27.490 回答