breezejs:使用Skip时FetchFromLocalCache策略存在问题
考虑以下代码:breezejs:使用Skip时FetchFromLocalCache策略存在问题,breeze,Breeze,考虑以下代码: function search(filter) { var query = breeze.EntityQuery .from("Mandates").skip(offset).take(pageSize).inlineCount(true); if (queryParamCache[cacheObj] > 0) { query = query.using(b
function search(filter) {
var query = breeze.EntityQuery
.from("Mandates").skip(offset).take(pageSize).inlineCount(true);
if (queryParamCache[cacheObj] > 0) {
query = query.using(breeze.FetchStrategy.FromLocalCache);
} else {
query = query.using(breeze.FetchStrategy.FromServer);
}
return manager.executeQuery(query.using(service)).then(function (result) {
return result;
});
}
queryParamCache用作一个标志,以确定查询结果是否已在缓存中
现在,如果调用此方法并将offset设置为120以跳过前12页(每页10条记录),则会调用服务器并显示结果
然后,我对第13页进行了同样的调用,这很有效,我返回到第12页。这次是从缓存中提取记录,这正是我想要的
但在breezejs代码中,在函数ExecuteQueryLocal中,执行以下代码:
var skipCount = query.skipCount;
if (skipCount) {
result = result.slice(skipCount);
}
skipCount设置为120,但显然这只是删除了数组中的所有内容,因为我只有20条记录(第12页和第13页)
这不是虫子吗?还是我错过了什么 你没有错过任何东西,这不是一个bug 只是如果breeze正在执行一个本地查询,那么它所要处理的就是本地查询缓存中的数据。在这种限制下,breeze返回的答案正是正确的。基本上,本地查询只是针对本地缓存的查询,因此,如果本地缓存包含40条记录,并且您告诉它跳过120条,然后给您下一个10条,那么将不会返回任何记录
通常,如果要对本地缓存使用带有“skip”的查询,则必须了解这些限制。i、 e.将所有数据放入缓存或删除“跳过”或确保“待跳过”记录已在缓存中 哇,好的。这将需要编写大量的锅炉板代码,不确定是否值得。但我明白问题不在于微风。谢谢