Javascript foreach中的Discord.JS addField不工作
由于某种原因,addField不起作用。没有错误,只是没有出现 查询和foreach都很好,可以正常工作。我在命令中使用了完全相同的设置。它只是不适用于嵌入式系统Javascript foreach中的Discord.JS addField不工作,javascript,node.js,discord.js,Javascript,Node.js,Discord.js,由于某种原因,addField不起作用。没有错误,只是没有出现 查询和foreach都很好,可以正常工作。我在命令中使用了完全相同的设置。它只是不适用于嵌入式系统 const con = mysql.createConnection({ host: "localhost", user: "root", password: "", database: "testbot" }); con.connect(err => { if(err) throw err; console.log("Conn
const con = mysql.createConnection({
host: "localhost",
user: "root",
password: "",
database: "testbot"
});
con.connect(err => {
if(err) throw err;
console.log("Connected to database!");
});
function statusUpdate() {
var update = bot.channels.get('5777623821454355545');
const statusEmbed = new Discord.RichEmbed();
statusEmbed.setTitle("**Current Statuss:**");
con.query("SELECT * FROM games", function(err, result, fields) {
if(err) throw err;
Object.keys(result).forEach(function(key) {
var row = result[key];
statusEmbed.addField('**' + row.name + '**' + ' - ' + '(' + row.description + ')' + ' - ' + '**' + row.status + '**');
});
});
update.send(statusEmbed);
}
bot.on('ready', () => {
console.log('This bot is online!');
statusUpdate();
});
您必须在查询回调中更新
statusEmbed
,因为如果不这样做,您将在尚未执行addField
时更新它
回调意味着查询是异步的
基于回调的解决方案
function statusUpdate(callback) {
const update = bot.channels.get('577762382164525066');
const statusEmbed = new Discord.RichEmbed();
statusEmbed.setTitle('**Current Statuss:**');
con.query('SELECT * FROM games', function(err, result, fields) {
if (err) {
callback(err);
return;
}
Object.keys(result).forEach((key) => {
const row = result[key];
statusEmbed.addField(`**${row.name}** - (${row.description}) - **${row.status}**`);
});
update.send(statusEmbed);
callback(false);
});
}
function statusUpdate() {
const update = bot.channels.get('577762382164525066');
const statusEmbed = new Discord.RichEmbed();
statusEmbed.setTitle('**Current Statuss:**');
con.query('SELECT * FROM games', function(err, result, fields) {
if (err) {
throw err;
}
Object.keys(result).forEach((key) => {
const row = result[key];
statusEmbed.addField(`**${row.name}** - (${row.description}) - **${row.status}**`);
});
update.send(statusEmbed);
});
}
备选方案
function statusUpdate(callback) {
const update = bot.channels.get('577762382164525066');
const statusEmbed = new Discord.RichEmbed();
statusEmbed.setTitle('**Current Statuss:**');
con.query('SELECT * FROM games', function(err, result, fields) {
if (err) {
callback(err);
return;
}
Object.keys(result).forEach((key) => {
const row = result[key];
statusEmbed.addField(`**${row.name}** - (${row.description}) - **${row.status}**`);
});
update.send(statusEmbed);
callback(false);
});
}
function statusUpdate() {
const update = bot.channels.get('577762382164525066');
const statusEmbed = new Discord.RichEmbed();
statusEmbed.setTitle('**Current Statuss:**');
con.query('SELECT * FROM games', function(err, result, fields) {
if (err) {
throw err;
}
Object.keys(result).forEach((key) => {
const row = result[key];
statusEmbed.addField(`**${row.name}** - (${row.description}) - **${row.status}**`);
});
update.send(statusEmbed);
});
}
我更新了我的问题。你的答案只是给了我一个回调不是函数的错误。我在问题的底部添加了bot.on('ready'),我忘了向你展示。bot.onReady与这件事无关。在我的解决方案中,您必须将回调传递到
statusUpdate
,我将添加一个没有HMM的示例,好吗。我添加了你的答案,我刚刚得到的错误回调不是functionEDIT***Nvm,第一个答案现在工作了。很抱歉,谢谢你的帮助。