node.js - 节点 - 嵌套 For 循环异步行为
问题描述
我正在尝试从数据库创建动态 JSON,但由于节点 js 的异步行为,我无法做到这一点。
exports.wsGetDirectoryTree = function(request,response){
pool.getConnection(function(err, connection) {
if (err) {
console.log("Error while connecting to DB : " + err);
response.send(error);
return;
} else {
// Org List
objDb.wsGetOrganisationTree(connection, function(callback) {
if(callback){
var data= JSON.stringify(callback);
var jsonObject = JSON.parse(data);
var count = Object.keys(jsonObject).length;
var finalResponse = '';
var org = '';
var gst = '';
var url = '';
// Org List
for(var i=0;i<count;i++){
var temp = JSON.stringify(jsonObject[i]);
var tempData = JSON.parse(temp);
(function(i){
// {"Apple"
org = '{'+'\"'+tempData.organisation_name+'\":';
console.log("org -> "+org);
// Guest list
objDb.wsGetGuestTree(tempData.organisation_id,connection, function(callback) {
if(callback){
var data= JSON.stringify(callback);
var jsonObject = JSON.parse(data);
var count = Object.keys(jsonObject).length;
// Guest list
for(var j=0;j<count;j++){
var temp = JSON.stringify(jsonObject[j]);
var tempData = JSON.parse(temp);
//{"Jhon":
gst = '{'+'\"'+tempData.guest_name+'\":';
console.log("gst = "+gst);
finalResponse = org + gst;
// Url list
objDb.wsGetUrlTree(tempData.guest_id,connection, function(callback) {
if(callback){
var data= JSON.stringify(callback);
finalResponse = finalResponse + data;
console.log("finalResponse = "+finalResponse);
return;
} else {
return;
}
});
}
data = data.replace('[','');
data = data.replace(']','');
return;
} else {
return;
}
});
})(i); //function for counting
} //loop end
response.send(data);
return;
} else {
response.send(invalidData);
return;
}
});
}
connection.release();
});
};
我期待低于输出 -
{ "Organisation01": { "Guest01": { "Images": ["IMG-20180117-WA0004.jpg", "IMG-20180117-WA0004.jpg"], "Video": ["IMG-20180117-WA0004.jpg ", "IMG-20180117-WA0004.jpg"] }, "Guest02": { "图片": ["IMG-20180117-WA0004.jpg", "IMG-20180117-WA0004.jpg"] } }, "Organisation02" : { "Guest01": { "图片": ["IMG-20180117-WA0004.jpg", "IMG-20180117-WA0004.jpg"] } }, "Organisation03": { "Guest01": { "图片": [ "IMG-20180117-WA0004.jpg", "IMG-20180117-WA0004.jpg"] } }, "Organisation04": { "Guest01":{“图片”:[“IMG-20180117-WA0004.jpg”,“IMG-20180117-WA0004.jpg”]}}}
解决方案
由于您的 for 循环计数实际上需要进行异步调用objDb.wsGetGuestTree()
,因此建议使用异步模块。
请检查: https ://www.npmjs.com/package/async https://caolan.github.io/async/docs.html#eachSeries
推荐阅读
- c++ - C++:对 ABC 的子类强制执行单例
- r - 如何安全地将 api 密钥添加到 dockerized Shiny App?
- python - Python Django 错误 ModuleNotFoundError:没有名为“corsheaders”的模块
- python - 为什么 np.ones 创建黑色图像?
- python - 在打印的字符串中打印希腊字母
- c - Eclipse CDT:如何从源文件生成头文件?
- ruby - Bundler:将 gem 从 git 安装到 gems 文件夹而不是 bundler 文件夹
- javascript - 调试时未定义 Webpack Ajax 响应
- java - 一个 REST 调用的 Java setProperty "https.protocols", "TLSv1.2"
- java - 如何在 TreeSet 中切换排序顺序