Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用sqlite在javascript中生成if语句_Javascript_Sqlite - Fatal编程技术网

如何使用sqlite在javascript中生成if语句

如何使用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("

因此,我最近在discord js中使用warn命令编写了这段代码,但有一个问题,我的if语句不能像我希望的那样工作,并且如果值不存在,我希望它能工作。返回message.channel.send(“此用户没有记录!”);因为我从未尝试在javascript上使用sqlite,我只知道在c上使用sqlite#


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,
    });
  });
});