javascript - 在 if 语句中检索用于比较的值时出现问题

标签 javascript mysql node.js for-loop if-statement

我有以下变量:

   var userFound = false;

如果情况成立,我希望执行以下 if 语句:

 if (userFound) {
    //
        res.render('pickup/errorAlreadyDelivered', {});

  }

但是,问题是它没有考虑上面 for 循环内变量值的变化。下面是大部分代码。

var userFound = false;

let sql = `SELECT box_id, cubby_id, comport, deliveredToUser
                   FROM recipients
                   WHERE package_password = ?`;

connection.query(sql, [req.session.sessionUserPackagePassword], function(err, rows, fields) {
  if (!err) {
    for (var i = 0; i < rows.length; i++) {
      // Make the comparaison case insensitive

      if ((rows[i].deliveredToUser).toLowerCase() == `no`) {
        userFound = true;



        var comport = rows[i].comport;
        var command = "open" + rows[i].cubby_id;
        var commandClose = "close" + rows[i].cubby_id;
        var commandStatus = "status" + rows[i].cubby_id;



        console.log(command);
        console.log(comport);


        var options = {
          scriptPath: 'python/scripts',
          args: [command, comport, commandClose, commandStatus] // pass arguments to the script here

        };


        PythonShell.run('controlLock.py', options, function(err, results) {
          if (err) {
            res.render('errorConnection', {});
          }
          console.log('results: %j', results);
        });

      }



    }

    // If the query fails to execute
  } else {
    console.log('Error while performing Query.');
    res.render('errorConnection', {});

  }
});
connection.end();

if (userFound) {
  //
  res.render('pickup/errorAlreadyDelivered', {});

}

任何帮助将不胜感激。

最佳答案

将 userFound 设置为 true 的回调将在 if (userFound) 行运行后运行,即使它们不是按该顺序编写的。 connection.query 是一个异步函数。尝试将 userFound 逻辑放在回调中,以便在收到查询结果并将 userFound 设置为 true 后运行。

connection.query(sql, [req.session.sessionUserPackagePassword], function(err, rows, fields) {
  if (!err) {
    for (var i = 0; i < rows.length; i++) {
      // Make the comparaison case insensitive

      if ((rows[i].deliveredToUser).toLowerCase() == `no`) {
        userFound = true;

        var comport = rows[i].comport;
        var command = "open" + rows[i].cubby_id;
        var commandClose = "close" + rows[i].cubby_id;
        var commandStatus = "status" + rows[i].cubby_id;

        console.log(command);
        console.log(comport);

        var options = {
          scriptPath: 'python/scripts',
          args: [command, comport, commandClose, commandStatus] // pass arguments to the script here

        };


        PythonShell.run('controlLock.py', options, function(err, results) {
          if (err) {
            res.render('errorConnection', {});
          }
          console.log('results: %j', results);
        });

      }
    }

    // If the query fails to execute
  } else {
    console.log('Error while performing Query.');
    res.render('errorConnection', {});
  }
  connection.end();

  if (userFound) {
    //
    res.render('pickup/errorAlreadyDelivered', {});

  }
});

关于javascript - 在 if 语句中检索用于比较的值时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43443370/

相关文章:

javascript - if/else-if 语句不添加类的问题

c# - MVC $.ajax 调用从不在 Edit 上执行 Controller 操作,但在 Add 上工作

sql - 多个数据库文件是否比多个表的数据库文件效率低?(SQLite3&Node.js)

javascript - Node 服务器下载图片成功但不显示

javascript - 折叠事件不触发 Bootstrap 2.3.2 JQuery 1.10

php - 使用Twilio的短信验证系统

php - 如何防止撇号被删除 PHP MySQL

mysql - 如果数据库字段已经存在,将其重命名为给定模式的最佳方法是什么?

sql - 在elasticsearch中获取最近一小时的记录

javascript - Angular JS - 具有嵌套范围的 http 请求错误