Node.JS MySql 在循环中等待预期结果

Posted

技术标签:

【中文标题】Node.JS MySql 在循环中等待预期结果【英文标题】:Node.JS MySql Waiting for expected result in Loop 【发布时间】:2020-10-21 21:28:51 【问题描述】:

我正在尝试使用 mysql 在 Node.js 中为 Discordbot 创建一个循环,该循环等待 mysql 的结果与我想要的匹配,但我得到的只是这个错误: 抛出错误; // 重新抛出非 MySQL 错误 类型错误:无法读取未定义的属性“天”

MySql 连接和其他一切正常。但是当他没有找到结果时,我得到了这个错误,我的机器人崩溃了。

我的代码:

  var requestloop = setInterval(function()
    var con = mysql.createConnection(
      host: process.env.IP,
      user: process.env.US,
      password: process.env.PW,
      database: "XYZ"
    );

  con.connect(function(err) 
    if (err) throw err;
    con.query("SELECT name,day FROM team WHERE day='0:45'", function (err, result) 
      if (err) throw err;

      //Sending Congrats
      if (result[0].day == "0:45")
            
          let Worktime = new MessageEmbed()
          .setTitle(result[0].name + `, Congratulations, you've finished work for today`)
          .setColor("GREEN");
          client.channels.cache.get('702139096683905054').send(Worktime);
          con.end();
        
        else
        
          return con.end();
        
      );
    );
  , 60000); //1 Minute

【问题讨论】:

你能 console.log(result) 吗? @Cursed 没有我可以记录的结果,这就是问题 xD。我希望代码忽略错误并返回。如果现在有结果,则在 1 分钟后重试。 if(result? result[0].day : "0:44" == "0:45") 试试这个> 我试过了,但不幸的是我仍然得到未定义的错误'day' 好的,现在我得到了结果 => [ RowDataPacket day: '0:47' ] 【参考方案1】:
if(result? result.day : "0:44" == "0:45")

如果没有结果,试试这个,字符串将是 44,然后转到 else

【讨论】:

以上是关于Node.JS MySql 在循环中等待预期结果的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 等待循环中读取的所有文件

Node.js 和 Redis;等待循环完成

node.js:while 循环回调未按预期工作

Node.js/Mongoose 等待异步 For 循环

一文搞懂Node.js以及浏览器中的事件循环机制

如何使用 node.js MySQL 从 MySql DB 获取结果并将它们发送回 API.ai - DialogFlow