我的Node应用程序在运行我编写的函数时冻结。代码将在第11个循环的特定行处停止执行,没有错误消息。不能向应用程序发出进一步的请求,必须重新启动应用程序。数据在每次运行时都会发生变化,并且总是第11次迭代。
它调用的函数比较复杂,所以我不能把代码放在这里。我的问题是,当您没有看到失败通知时,如何诊断一段代码?我假设问题是与mysql相关的,因为在下面代码的简化版本中记录的最后一件事是'Org request start11‘-没有任何错误消息。但是我不明白在不进入回调的情况下,代码怎么会在这里停止执行。
示例代码如下:
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,MySQL5.5
发布于 2020-04-26 18:11:17
所以我发现问题在于,我在其他地方运行了一个查询,在调用的第二个函数中缺少释放mysql连接的一行。添加此功能解决了错误。我不明白为什么这不会触发错误,或者我怎么会用更系统的方法来诊断这个问题,所以我想听到任何评论。
https://stackoverflow.com/questions/61430855
复制相似问题