【发布时间】:2026-02-08 13:40:01
【问题描述】:
我在 Node.js 中遇到了“回调地狱”的情况。
基本上我想要的是:
从静态 json 文件中读取数据(本地) --> 查询 MongoDB 以从两个单独的集合中获取两条记录 --> 比较返回的数据 -> 将比较后的结果添加到结果对象中 --> 进入下一步在循环中 --> 重复。
请检查代码,让我知道问题出在哪里。
jsonfile.readFile(file, function(err, staticData) {
if(err){
console.log("Error while loading Tower Details from Static Data " + err);
}
else{
var staticD = staticData.Teams;
var l = staticData.Teams.length;
// console.log('*******************Getting Tower Level Data from Static File*******************');
//console.log('*******************Tower Name received is ******************* ' + staticData.Tower);
if(counter == l){
console.log('Inside the couneter loop');
res.json(testObject);
}
for ( var i = 0 ; i<l; i++){
var trackName = staticD[i].name
console.log('Counter--------->>>>' + counter);
//console.log("Team name " + staticD[i].name);
++counter;
for (var j = 0 ; j<staticD[i].applications.length;j++){
//var RObj;
//var AObj;
//console.log("Application Name " + staticD[i].applications[j]);
var applicationName = staticD[i].applications[j];
var test = new Object();
test.data = [];
var resultSet;
var response = reference.find({'appname' : applicationName , 'track' : trackName }).sort({'_id': -1});
var promise = response.exec();
var alertT = alert.find({'appname' : applicationName , 'track' : trackName }).sort({'_id': -1}).limit(1);
var promise1 = alertT.exec();
promise.then(function allRefRecords (recordAlerts){
if(recordAlerts.length >0){
//console.log('Ref Length' + recordAlerts.length);
recordAlerts.forEach(function refRecord(R){
testObject.data.testInfra.push(R);
//console.log('testObject' + testObject.data.testInfra);
});
}
});
promise1.then(function allAlertsRecords (alerts){
if(alerts.length > 0){
alerts.forEach(function refRecord(a){
// console.log('a' + a)
testObject.data.testCustom.push(a);
//console.log('testObject' + testObject.data.testCustom);
// res.json(testObject);
});
}
})
.then(function(){
resultSet = compareData(testObject.data.testCustom,testObject.data.testInfra);
test.data.push(resultSet);
})
.then(function(){
res.json(test);
});
}
}
}
});
});
【问题讨论】:
-
我会建议你在你的代码中使用
async,而不是使用for循环。 -
我已经尝试了代码中的承诺,但是我得到了可变的结果。有时我会收到 2 条记录,有时会收到 3 条记录。
标签: javascript node.js mongodb asynchronous