【发布时间】:2021-12-30 00:29:37
【问题描述】:
我正在用 JavaScript 制作一个不和谐的机器人。当玩家工作机器人时,我想打发cooltime。
首先,我设置了等待功能。
function sleep(ms) {
return new Promise((r) => setTimeout(r, ms));
}
还有,
if (mine_cooltime === 0) {
mine_cooltime = 1;
const msgRef = await message.reply({embeds: [embed_mine_stone]}); // Don't care this
sleep(user.mine_time)
.then(() => msgRef.edit({embeds: [embed_mine_stone_end]})) // Don't care this
.then(() => saveUser = {id, name, wood : user.wood, stone : user.stone + 3, iron : user.iron, coal : user.coal, gold : user.gold, diamond : user.diamond,
findWood : user.findWood, findStone : 1, findironOre : user.findironOre, findCoal : user.findCoal, findGold : user.findGold, findDiamond : user.findDiamond, user.mine_time : user.mine_time
})
.then(() => fs.writeFileSync(filePath, JSON.stringify(saveUser)))
.then(() => mine_cooltime = 0);
}
这是一个挖掘石头的代码。
if (wood_cooltime === 0) {
wood_cooltime = 1;
const msgRef = await message.reply({embeds: [embed_wood_cut]}); // Don't care this
sleep(user.wood_time)
.then(() => msgRef.edit({embeds: [embed_wood_cut_end]})) // Don't care this
.then(() => saveUser = {id, name, wood : user.wood + 5, stone : user.stone, iron : user.iron, coal : user.coal, gold : user.gold, diamond : user.diamond,
findWood : 1, findStone : user.findStone, findironOre : user.findironOre, findCoal : user.findCoal, findGold : user.findGold, findDiamond : user.findDiamond, user.mine_time : user.mine_time
})
.then(() => fs.writeFileSync(filePath, JSON.stringify(saveUser)))
.then(() => wood_cooltime = 0);
}
这是一个砍伐森林的代码。
“mine_time”和“wood_time”都是 5000。
如果我在操作切割代码后3秒操作采矿代码,在采矿代码完成后的最初2秒,“木头”增加。但是当挖矿代码完成时,“木”是一样的,只是“石头”增加了。
为什么会发生这种情况,我该如何解决?
【问题讨论】:
-
您使用来自
user的值更新saveUser并将saveUser写入文件,但是您是否更新了user?如果您没有更新user,那么每当您尝试更新saveUser时,都会重复使用最旧的值。 -
旁注:将每一行都放在单独的
then块中是多余的。如果then块中要完成的任务不是异步的,只需在一个then块中完成所有这些任务。或者干脆使用 async/await
标签: javascript node.js discord.js