javascript - .db 和 Promises 的问题
问题描述
所以我正在研究这个小型的不和谐机器人,我现在正在研究的部分是让机器人能够跟踪用户发送了多少条消息,并能够在出现提示时吐出该数量。这第一块代码来自主文件
const client = new Discord.Client();
const prefix = "!"; //Our bot's prefix
const fs = require('fs');
const db = require('quick.db'); //Database to track user message counts
client.on('ready', () => {
console.log('Logged in and ready to socially distance!')
});
//This will run everytime a message is recieved
client.on('message', message => {
let args = message.content.slice(prefix.length).trim().split(" ");
let cmd = args.shift().toLowerCase();
try { //This is allow bot commands to be placed in seperate files, so no need for constant if-else statements
let commandFile = require(`./commands/${cmd}.js`);
commandFile.run(client, message, args);
} catch(e) {
console.log(e.message);
} finally {
console.log(`${message.author.username} ran the command: ${cmd}`);
}
if (!message.content.startsWith(prefix)) return; //Ignores a message if it doesn't start with our prefix
//Message Tracking/Leveling
db.add(message.author.id + message.guild.id, 1).then(i => {
let messages;
if (i.value == 25) messages = 25; //This will be Level 1
else if (i.value == 50) messages = 50; //This will be Level 2
else if (i.value == 100) messages = 100; //This will be Level 3
if (!isNaN(messages)) { //If messages empty this runs
db.add(`userLevel_${message.author.id + message.guild.id}`, 1)
.then(o => {
message.channel.send(`You sent ${messages} messages, so you leveled up! You are now level ${o.value}`); //Sends updated level to the channel
})
.catch(ex); {
message.channel.send("Sorry, can't do that.")
}
}
})
});
client.login('TOKEN-ID');
代码的下一部分是一个单独的文件
exports.run = (bot, message, args) => {
db.get(message.author.id + message.guild.id)
.then(i => { //Messages sent
db.get(`userLevel_${message.author.id + message.guild.id}`)
.then(o => { //Their level
message.channel.send('Messages sent: `' + (i.value + 1) + '`\nLevel: `' + o.value + '`'); //Returns messages and level
}
).catch(ex); {
message.channel.send("Sorry, can't do that.")
}
})}
最后这是错误
^
TypeError: db.add(...).then is not a function
解决方案
因此,quick.db 文档 db.add()
不会返回承诺,因此您不能将回调附加到它。该过程是同步管理的:
db.add(message.author.id + message.guild.id, 1)
// Continue your code here and the previous line is garantized to be finished already
对于db.get()
和所有操作相同quick.db
。它们是同步的。
推荐阅读
- npm - 我的 webpack babel 加载器没有编译我的 javascript 代码
- jsonschema - 如何验证包含 MIXED 类型对象的 json 模式数组?
- regex - 正则表达式替换 - 删除不匹配的值
- git - 在几个 git repos 之间同步
- android - 如何在android中播放vimeo视频。我尝试过使用 webview。有没有其他方法可以播放 vimeo 视频?
- java - 如何在 Java 中的整数列表中添加列表元素
- javascript - 内容可编辑在刷新时丢失其选项卡/新行
- ios - 获取 ios 故事板 webView 应用程序以在安全区域呈现
- python-3.x - 有没有办法在 Python3 中将列表分组为子列表?
- php - 如何验证记录更新中的唯一字段