我有一个基本的登录系统,可以执行以下操作:
- 检查用户名是否存在(正常)
- 插入用户名
插入后,我选择插入的用户名
的id
。第一次登录时这是正确的,但是当我注销并使用新用户名登录时,插入速度太慢,导致我的选择抛出异常,因为插入尚未完成。我该如何解决这个问题?
我的代码:
数据库.js:
getPlayerByName (username) {
return this.knex("penguins").first("*").where("username", username)
}
getPlayerExistsByName (username) {
return this.knex("penguins").where("username", username).select("username")
}
insertPlayer (username) {
return this.knex("penguins").insert({username: username}).then(() => {
Logger.info(`Inserted ${username}`)
}).catch((err) => {
Logger.error(err)
})
}
登录.js:
function handlePlayer (username, res) {
database.getPlayerExistsByName(username).then(result => {
if (result.length != 1) { // Username does not exist
database.insertPlayer(username) // Insert username
database.getPlayerByName(username).then(penguin => {
return write(`&id=${penguin.id}&m=${penguin.mod}${Errors.OK}`, res) // I need the id here
})
} else {
return write(Errors.NAME_UNAVAILABLE, res)
}
})
}
最佳答案
尝试在then的回调中使用async函数,并在insert中使用await并让用户同步执行这2个方法
关于javascript - Node.js Knex SQL 插入太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51337324/