javascript - Node.js - 来自函数的值返回未定义

标签 javascript mysql node.js undefined return-value

<分区>

我正在使用 discord.js 开发一个机器人。我的目标要求我利用 SQL 来存储用户信息及其积分。当我尝试使用 !points 命令时,我从控制台收到了正确的响应。然而,我的 !points case 语句返回了一个未定义的值。在没有 if 语句的情况下进行测试时,我收到这样的消息:有未定义的点。

bot.on("message", function(message) {
  if (message.author.equals(bot.user)) return;

  var command = message.content.split(" ")[0];
  var param = message.content.split(" ")[1];

  if (!VALID_CMDS.includes(command)) return;
  var GUILD = bot.guilds.values().next().value;
  switch (command) {
    case "!hello":
      if (param) {
        message.channel.send("Hello, " + param);
      } else {
        message.channel.send("Use a second parameter and try again. FORMAT: !hello <name_goes_here>");
      }
      break;
    case "!points":
      if (getPoints(param) > -1) {
        message.channel.send(param + " has " + points + " points");
      }
      break;
  }
});

function getPoints(username) {
  var GUILD = bot.guilds.values().next().value;

  var sql = "SELECT points, user_name FROM users WHERE user_name=" + "'" + username + "'";
  db.query(sql, function(err, result) {
    if (err) throw err;
    if (!resultEmpty(result)) { //The following console log outputs an actual numerical value for result[0].points (not undefined)
      console.log(result[0].user_name + " has " + result[0].points + " points");
      return result[0].points;
    } else {
      console.log("User with the name " + username.toString() + " not found")
      return -1;
    }
  });
}

最佳答案

您的 getPoints 函数目前没有返回任何内容,因此它默认为 undefined。让它返回一个解析为 points 值的 Promise,这样您就可以在其上调用 .then:

bot.on("message", function(message) {
  if (message.author.equals(bot.user)) return;

  var command = message.content.split(" ")[0];
  var param = message.content.split(" ")[1];

  if (!VALID_CMDS.includes(command)) return;
  var GUILD = bot.guilds.values().next().value;
  switch (command) {
    case "!hello":
      if (param) {
        message.channel.send("Hello, " + param);
      } else {
        message.channel.send("Use a second parameter and try again. FORMAT: !hello <name_goes_here>");
      }
      break;
    case "!points":
      getPoints(param)
        .then((points) => {
        if ( > -1) { //The return value of getPoints() is undefined
          message.channel.send(param + " has " + points + " points");
        }
      }
    break;
  }
});

function getPoints(username) {
  return new Promise((resolve, reject) => {
    var GUILD = bot.guilds.values().next().value;

    var sql = "SELECT points, user_name FROM users WHERE user_name=" + "'" + username + "'";
    db.query(sql, function(err, result) {
      if (err) return reject(err);
      if (!resultEmpty(result)) { //The following console log outputs an actual numerical value for result[0].points (not undefined)
        console.log(result[0].user_name + " has " + result[0].points + " points");
        resolve(result[0].points);
      } else {
        console.log("User with the name " + username.toString() + " not found")
        resolve(-1);
      }
    });
  });
}

关于javascript - Node.js - 来自函数的值返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50780674/

相关文章:

javascript - AngularJS 1.5.x 服务未正确绑定(bind)且未在 Controller 中更新

javascript - 如何在 javascript 中生成颜色较浅的随机十六进制代码?

mysql - 如果我有用户的纬度/经度位置,如何找出用户的邮政编码?需要帮助编写查询

Javascript 缓冲区数组有数据但记录为未定义

node.js - 如何将 JWT 从客户端传递到我的 API 以进行正确身份验证?

javascript - 页面过渡向下滑动和弹跳

c++ - 何时调用 mysql_free_result (Resuing mysql_store_result, MYSQL_RES)

MySQL 检查传入主机名 (Linux)

javascript - NodeJS串口检查端口是否存在功能不起作用

javascript - 理解 AngularJS 中的 Controller 范围