簡體   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