繁体   English   中英

如何使用偏移量在Sequelize中正确获得分页结果?

[英]How to correctly get paginated results in Sequelize using offset?

我有以下简单的代码:

const users = await User.findAll({
    limit: 10,
    offset: (page - 1) * 10,
    order: [['createdAt', 'DESC']],
    where: { isAdmin: false },
  })

我希望这段代码能根据page返回分页的用户结果。 例如,对于page = 1我希望获得前10个用户,对于page = 2我希望获得接下来的10个用户。

在测试中,我正在使用bulkCreate创建用户:

await models.User.bulkCreate(
        Array.from({ length: 25 }).map((_, i) => ({
          email: `user-${i}@test.com`,
          name: 'test',
          password: 'password1',
        })),
      )

然后,我用page = 1进行查询,该查询按预期方式工作-它返回给我user-0@test.com直至user-9@test.com

但是,当我用page = 2进行查询时,它将返回user-9user-18 我希望将user-10提升到user-19 ,但是我会在第一个查询中收到user-9

我在这里做错了什么? 提前致谢。

我想我在解决了最后40分钟后就发现了问题。

我查看了我的Users表,意识到bulkCreate实际上是在完全相同的时间创建了所有它们(这很有意义)。 这意味着它们的createdAt完全相同,因此我的结果并不是真正可靠地排序。

我选择不使用bulkCreate,而是使用此草率的实现在创建每个用户之前添加一个小的延迟:

await Promise.all(
    Array.from({ length: 25 }).map(
      (_, i) =>
        new Promise(resolve => {
          setTimeout(async () => {
            await User.create({
              email: `user-${i}@test.com`,
              name: 'test',
              password: 'password1',
            })
            resolve()
          }, i * 50)
        }),
    ),
  )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM