我试图在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);
});
}
});
});
我该如何修复它?这可能是这种“行为”的解决方案?
1条答案
按热度按时间jdgnovmf1#
根据sequelize的文档:
在PostgreSQL中,
incrementResult
将是更新的用户,除非设置了{ returning: false }
选项(然后它将是未定义的)。在其他方言中,
incrementResult
将是未定义的。如果您需要更新的示例,则必须调用user.reload()
。所以,如果你使用的是PostgreSQL,你可以将user改为
let
而不是const
,并在每次递增时将更新后的值保存到它:如果你使用的是其他方言/数据库,你需要在递增后调用
user.reload()
: