[英]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-9
到user-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.