mysql - 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
解决方案
所以我发现问题在于我在其他地方运行的查询缺少一行来释放第二个调用函数中的 mysql 连接。添加这个解决了这个错误。我不明白为什么这不会触发错误,或者我将如何使用更系统的方法进行诊断,所以想听听任何意见。
推荐阅读
- prestashop - Prestashop 1.7 产品标志
- css - 即使是伪类也不起作用tailwindcss reactjs
- reactjs - 如何在不从前端下载的情况下将使用 jsPDF 创建的 PDF 发送到 API
- mysql - 如何在jsp mysql中使用while从数据库中获取2个选择选项下拉列表
- amazon-ec2 - 在 aws 成员注销后自动 Ec2 停止
- python - 如何使用硒从搜索建议中保存值?
- fortran - 在 Fortran ifort 中获取完整的堆栈跟踪
- python - 在 python 文件中运行带有增强和读取输出的 python 命令
- android - 在特定时间触发firebase云功能
- solr - 为电话簿配置 ext:solr