【问题标题】:Node - Nested For loop async behaviour节点 - 嵌套 For 循环异步行为
【发布时间】:2019-03-15 09:54:11
【问题描述】:

我正在尝试从数据库创建动态 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();
    });
};

我期待低于输出 -

{ “组织01”:{ “客人01”:{ “图片”:[“IMG-20180117-WA0004.jpg”,“I​​MG-20180117-WA0004.jpg”], “视频”:[“IMG-20180117-WA0004.jpg”、“IMG-20180117-WA0004.jpg”] }, “来宾02”:{ “图片”:[“IMG-20180117-WA0004.jpg”、“IMG-20180117-WA0004.jpg”] } },“组织02”:{ “客人01”:{ “图片”:[“IMG-20180117-WA0004.jpg”、“IMG-20180117-WA0004.jpg”] } },“组织 03”:{ “客人01”:{ “图片”:[“IMG-20180117-WA0004.jpg”、“IMG-20180117-WA0004.jpg”] } },“组织 04”:{ “客人01”:{ “图片”:[“IMG-20180117-WA0004.jpg”、“IMG-20180117-WA0004.jpg”] } } }

【问题讨论】:

    标签: node.js loops asynchronous


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-05
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 2015-11-30
      • 2019-01-20
      • 1970-01-01
      • 2020-05-31
      相关资源
      最近更新 更多