节点-嵌套的For循环异步行为

时间:2018-10-10 13:08:40

标签: node.js loops asynchronous

我正在尝试从数据库创建动态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”:{         “图像”:[“ IMG-20180117-WA0004.jpg”,“ IMG-20180117-WA0004.jpg”],         “视频”:[“ 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”]         }}

1 个答案:

答案 0 :(得分:0)

由于您的for循环计数实际上需要进行异步调用objDb.wsGetGuestTree(),因此建议使用异步模块。

请检查: https://www.npmjs.com/package/async https://caolan.github.io/async/docs.html#eachSeries