1

德克西菜鸟在这里。我正在尝试使用 Dexie.js 从 IndexedDB 中获取一些数据。我想批量获取数据(想想分页),似乎只有第一个查询有效。

这是数据:

db.friends.bulkAdd([
  {name: "David", age: 42},
  {name: "Neil", age: 37},
  {name: "Freddie", age: 36},
  {name: "Elvis", age: 56},
  {name: "Calvin", age: 22},
]);

这是查询#1:

db.friends
.orderBy('age')
.limit(2)
.offset(0)
.toArray()
.then(function(result) {
  // Works as expected!
});

查询 #2 返回一个空[]

db.friends
.orderBy('age')
.limit(2)
.offset(2)
.toArray()
.then(function(result) {
  // result is []
}); 

limit(2)如果我从查询 #2 中遗漏,则查询按预期工作,但offset()limit()在一起似乎不起作用。

我在这里做错了什么?我可能只是错过了 Dexie 或 IndexedDB 如何工作的一些非常基本的东西,但有人可以帮助我吗?

这是一个 JSFiddle来测试它。

4

1 回答 1

2

感谢您的jsfiddle。我可以同意,当我读到它的时候,我觉得它很奇怪。然后我意识到原因是offset()和limit()的顺序。在您的示例中,您在 offset() 之前使用了 limit(),这基本上意味着:

  1. 将结果限制为仅 2 项。
  2. 从 2 个项目的集合中,将偏移量设置为 2,这会导致结果为零。

所以解决方案是切换限制和偏移的顺序——首先使用偏移,然后对该集合应用限制。

于 2017-08-02T08:17:54.257 回答