如何在 JavaScript mashup 中从多个源最好地执行分页和排序

How to best perform paging and sorting from multiple sources in JavaScript mashup

我正在构建一个 Angular 应用程序,该应用程序从多个来源获取具有相似架构的数据。实际获取数据并呈现数据非常简单。我将所有请求构建到一个数组中,将数组提供给 $q,然后解决承诺 returning 所有数据。

我的问题是基于服务器的分页和排序。现在我只是将页面大小设置为 5 * n,其中 n 只是数据源的数量。但是如果有人然后按 Created 或类似的东西排序,我有时会得到意想不到的结果,因为只有 5 个项目的来源将全部出现在第一页上,而不管它们的创建日期。所以第一页可能是 2016 年 1 月的 20 个项目,然后是 2015 年 5 月的最后 5 个项目。如果我然后前进到下一页,我会得到预期的结果,直到我进入 2015 年 5 月的条目更大的数据源。那么较小列表中的那些五月项目将不会显示。

想法?建议?如果对此的回答是我很愚蠢,应该换一种方式来做,我对此持开放态度。

目前所有的数据源都比较小,所以我只是 return 所有项目,并在 UI 中进行所有的分页和排序。随着他们的成长,这在未来不太可能是可持续的。

为清楚起见,这是 SharePoint 2010 ListData.svc odata 服务。但这并不是真正的 SharePoint 特定问题。

如果您有多个数据源,则无法在不获取所有数据的情况下进行带排序的分页up-to例如您分页的位置

Source 1
Name 
A
B
C
D
E
F

Source 2
Name
P
Q
R
S
T
U

现在,如果你想得到第二页(大小为 2 * 2),同时按名称排序,预期结果是,

E
F
P
Q

用你的方法你最终得到

C
D
R
S

唯一可以保证获得正确排序的方法是获取所有数据直到页面您为所有来源显示,合并所有数据,排序 并在您的客户端中获取所需的页面。