0

考虑以下代码:

 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 用作标志来确定查询结果是否已经在缓存中。

现在,如果我调用此方法并将偏移量设置为 120 以跳过前 12 页(每页 10 条记录),则会调用服务器并显示结果。

然后,我对第 13 页进行了相同的调用,这有效,然后我返回到第 12 页。这次从缓存中获取记录,这正是我想要的。

但是在briefjs代码中,在函数executeQueryLocally中,执行了如下代码:

 var skipCount = query.skipCount;
    if (skipCount) {
        result = result.slice(skipCount);
    }

skipCount 设置为 120,但显然这只会删除数组中的所有内容,因为我只有 20 条记录(第 12 页和第 13 页)。

这不是错误吗?还是我错过了什么?

4

1 回答 1

1

你没有错过任何东西,这不是一个错误。

只是如果微风正在执行本地查询,那么它所需要处理的只是本地查询缓存中的数据。有了这个约束,微风正在返回正确的答案。基本上,本地查询只是对本地缓存的查询,因此如果本地缓存包含 40 条记录,而您告诉它跳过 120 条并给您接下来的 10 条,则不会返回任何记录。

通常,如果您想对本地缓存使用“跳过”查询,那么您必须了解这些限制。即要么将所有数据放入缓存中,要么删除“跳过”,或者确保“要跳过”的记录已经在缓存中。

于 2013-06-10T19:19:46.883 回答