需要 Explenation:奇怪的 MySQL2 行为:查询结果省略 1 行,除非

Explenation needed: Weird MySQL2 Behavior: Query Result omits 1 row, unless

提问人:Sam 提问时间:11/15/2023 最后编辑:BarmarSam 更新时间:11/16/2023 访问量:27

问:

在查询 SELECT 到 MySQLDB 时,结果中奇怪地省略了 1 行。在对错误进行暴力破解后,我发现,只有在另一个SELECT查询函数的回调中执行查询时,才会返回完整结果。

完整结果:

getQueueTime(() => {
  getOrders();
})

省略 1 行:getOrders();

现在我完全不明白为什么会发生这种情况,因为只使用了 SELECT 查询,我将不胜感激。以下函数的简化版本:

function getQueueTime(callback) {
    const sql = "SELECT SUM(queue_time) AS total_queue_time FROM Orders WHERE order_status = 'Processing'"

    pool.getConnection((err, connection) => {
            connection.query(sql, (error, results) => {
               connection.release();

                    let queue_time = results[0].total_queue_time;

                    callback(queue_time);
            }); 
    });
}
function getOrders(status) {
  return new Promise((resolve, reject) => {
    const sql = "SELECT * FROM Orders AS o JOIN OrderItems AS oi ON o.order_id = oi.order_id JOIN Food AS f on oi.food_id = f.food_id WHERE o.order_status = 'Processing'";
    
    connection.getConnection((err, connection) => {
        connection.query(sql, (error, results) => {
            console.log(results);
            connection.release();
            resolve(results);  //Here The results I´m talking about

    //rest of logic
   })
  })
 })
}

我尝试简单地在同一函数中使用另一个查询来复制它,并且还尝试仅使用空回调函数,两者都不占上风。

JavaScript MySQL 节点 .js

评论

0赞 Krokodil 11/15/2023
也许与记录锁定有关。我可能是错的,因为我并不完全知道记录锁定是如何工作的,但无论如何,等待一个查询返回,然后再对同一个表启动另一个查询是有意义的。
0赞 Barmar 11/16/2023
调用 时,您没有传递参数的参数。statusgetOrders()
0赞 Barmar 11/16/2023
您的代码非常不清楚。 返回一个 promise,但您从不使用或处理结果。getOrders()await.then()

答: 暂无答案