如何使用sqlite在javascript中生成if语句
因此,我最近在discord js中使用warn命令编写了这段代码,但有一个问题,我的if语句不能像我希望的那样工作,并且如果值不存在,我希望它能工作。返回message.channel.send(“此用户没有记录!”);因为我从未尝试在javascript上使用sqlite,我只知道在c上使用sqlite#如何使用sqlite在javascript中生成if语句,javascript,sqlite,Javascript,Sqlite,因此,我最近在discord js中使用warn命令编写了这段代码,但有一个问题,我的if语句不能像我希望的那样工作,并且如果值不存在,我希望它能工作。返回message.channel.send(“此用户没有记录!”);因为我从未尝试在javascript上使用sqlite,我只知道在c上使用sqlite# 将if语句移到forEach循环之外 之前: rows.forEach(r => { if (!rows) { message.channel.send("
将
if
语句移到forEach
循环之外
之前:
rows.forEach(r => {
if (!rows) {
message.channel.send("NO U");
}
之后:
if (rows.length === 0) {
return message.channel.send("NO U");
}
rows.forEach(r => {
正如其他评论中指出的,更改
!rows
到rows.length==0
,因为当找不到行时,库返回一个空数组。我会重构内容,因此有一个单独的函数将用户和数据库中的行转换为MessageEmbed
通过这种方式,很容易首先尝试将任何警告映射到消息,然后查看是否生成了任何警告,如果没有,则发送另一条消息
请注意,即使是空数组在JavaScript中也是真实的,因此您需要检查.length
const con = require("../../sql.js");
function warningRowToMessage(User, row) {
const { moderator, reason, time } = row;
return new MessageEmbed()
.setTitle(`User warnings!`)
.setDescription(`These is all the warnings which have been issued to ${User.tag}!`)
.setColor(`RED`)
.setThumbnail(User.displayAvatarURL())
.addFields(
{
name: "Moderator",
value: `${moderator}`,
inline: true,
},
{
name: "Username",
value: `${User.tag}`,
inline: true,
},
{
name: "Reason",
value: `${reason}`,
inline: true,
},
{
name: "When was warned",
value: `${time}`,
inline: true,
},
);
}
con.all(`SELECT * FROM warnings WHERE username = ? AND userID = ?`, User.tag, User.id, (err, rows) => {
const replyMessages = rows.map((r) => warningRowToMessage(User, r));
if (!replyMessages.length) {
message.channel.send("NO U");
return;
}
message.delete({
timeout: 3000,
});
replyMessages.forEach(async (replyMessage) => {
const msg = await message.channel.send(replyMessage);
msg.delete({
timeout: 15000,
});
});
});
在
.forEach()
中测试(!行)
,没有意义;如果行
为空
或未定义
您的代码将永远无法进入.forEach()
。好的,我将实际测试this@DoggoLeaker不知道你是不是认真的。。。正如Pointy所说,您不能在该变量的循环中测试null/未定义的变量,因为它永远不会被测试hit@nip空数组在JavaScript中是真实的;你需要!行数。长度至少为。@AKX这取决于行数是多少。我不熟悉他正在使用的图书馆,所以我认为条件很好。在这种情况下,更改为.length==0
现在有一个问题,但当用户有警告时,它不会显示在else中…@AKXX新代码:但仍然不工作新代码:当找到行时,它会发送一个警告
const con = require("../../sql.js");
function warningRowToMessage(User, row) {
const { moderator, reason, time } = row;
return new MessageEmbed()
.setTitle(`User warnings!`)
.setDescription(`These is all the warnings which have been issued to ${User.tag}!`)
.setColor(`RED`)
.setThumbnail(User.displayAvatarURL())
.addFields(
{
name: "Moderator",
value: `${moderator}`,
inline: true,
},
{
name: "Username",
value: `${User.tag}`,
inline: true,
},
{
name: "Reason",
value: `${reason}`,
inline: true,
},
{
name: "When was warned",
value: `${time}`,
inline: true,
},
);
}
con.all(`SELECT * FROM warnings WHERE username = ? AND userID = ?`, User.tag, User.id, (err, rows) => {
const replyMessages = rows.map((r) => warningRowToMessage(User, r));
if (!replyMessages.length) {
message.channel.send("NO U");
return;
}
message.delete({
timeout: 3000,
});
replyMessages.forEach(async (replyMessage) => {
const msg = await message.channel.send(replyMessage);
msg.delete({
timeout: 15000,
});
});
});