NodeJS 就绪后序列化中的控制台日志值不更改

wfypjpf4  于 2023-03-29  发布在  Node.js
关注(0)|答案(1)|浏览(99)

我试图在setInterval获得一个,我在setInterval递增1**,但当我尝试在ready事件中这样做时,它每次都返回相同的值。
尝试侦听器就绪事件外部的计数器(setInterval)中执行此操作,它工作正常。

client.once("ready", async () => {
  console.log("Ready!");
  Tags.sync();

  client.channels.map((x) => {
    if (x.type === "voice") {
      x.members.map(async (y) => {

        const user = await Tags.findOne({
          where: { id: ID },
        });

        user.increment("rank");

        setTimeout(() => {
          console.log("start");
         setInterval(async () => {

           //Here the value is always the same
              console.log("Test", user.get("level"));
      
              user.increment("rank");
          }, millisPerHour);
        }, millisToTheHour);
      });
    }
  });
});

我该如何修复它?这可能是这种“行为”的解决方案?

jdgnovmf

jdgnovmf1#

根据sequelize的文档:
在PostgreSQL中,incrementResult将是更新的用户,除非设置了{ returning: false }选项(然后它将是未定义的)。
在其他方言中,incrementResult将是未定义的。如果您需要更新的示例,则必须调用user.reload()
所以,如果你使用的是PostgreSQL,你可以将user改为let而不是const,并在每次递增时将更新后的值保存到它:

// At the start of the map function:
let user = await Tags.findOne({
    where: { id: ID },
});

// Inside of your setInterval
user = user.increment("rank");

如果你使用的是其他方言/数据库,你需要在递增后调用user.reload()

await user.increment("rank");
await user.reload();

相关问题