首页 > 解决方案 > NodeJS mysql应用程序冻结而没有错误 - 如何诊断

问题描述

运行我编写的函数时,我的 Node 应用程序冻结。代码将在第 11 次循环的特定行停止执行,没有错误消息。无法向应用程序发出进一步的请求,必须重新启动它。每次运行时数据都会发生变化,并且始终是第 11 次迭代。

它调用的函数比较复杂,这里就不放代码了。我的问题是,当您没有看到失败通知时,您如何诊断一段代码?我认为问题与 mysql 相关,因为在下面代码的简化版本中记录的最后一件事是“Org request start 11”——没有错误消息出现。但我不明白代码如何在不输入回调的情况下停止执行。

示例代码在这里:

async function processDataset(datasets){       
     for (let i = 0; i < datasets.length; i++) {
          const dataset= datasets[i];
          const orgData = await getOrgData(dataset.id);
          const parsedDataset = await processDataset(dataset, orgData);
     }
}



function getOrgData(datasetId) {
   return new Promise(function (resolve, reject) {
      console.log("Org request start", datasetId);

      connection.getConnection(function (err, connection) {
         console.log("got connection");
         if (err) {
            console.log(err);
            reject(err);
         }

         connection.query("select * from orgs;", function (error, rows, fields) {
            console.log("query returned");
            connection.release();
            if (error) {
               console.log(error);
               reject(error);
            }  
            resolve(rows);
         });
      });
   });
}

运行节点 v12/Express,mysql 5.5

标签: mysqlnode.js

解决方案


所以我发现问题在于我在其他地方运行的查询缺少一行来释放第二个调用函数中的 mysql 连接。添加这个解决了这个错误。我不明白为什么这不会触发错误,或者我将如何使用更系统的方法进行诊断,所以想听听任何意见。


推荐阅读