0

これは、mongodb を使用しない非同期コードのサンプルです。問題は、vars (data1_nodb,...) を db.collection.find(); に置き換えた場合です。関数、必要なすべての db 変数が最後に受信され、for() ループが正しく終了しません。誰かが助けてくれることを願っています。OA

    var calc = new Array();
    function mach1(callback){               

                        error_buy = 0;                                                  

                        // some vars                            

                        for(var x_c99 = 0; x_c99 < array_temp_check0.length;x_c99++){

                            // some vars                        

                                calc[x_c99] = new Array();                                      
                                calc[x_c99][0]= new Array();    

                                calc[x_c99][0][0] = "dummy1";
                                calc[x_c99][0][1] = "dummy2";
                                calc[x_c99][0][2] = "dummy3";
                                calc[x_c99][0][3] = "dummy4";
                                calc[x_c99][0][4] = "dummy5";

                                function start_query(callback) {

                                        data1_nodb = "data1";
                                        data2_nodb = "data2";
                                        data3_nodb = "data3";
                                        data4_nodb = "data4";


                                        calc[x_c99][0][0] = data1_nodb;
                                        calc[x_c99][0][1] = data2_nodb;
                                        calc[x_c99][0][2] = data3_nodb;


                                        callback(data1_nodb,data2_nodb,etc..);

                                }

                                        start_query(function() {

                                            console.log("start_query OK!"); 

                                            function start_query2(callback) {

                                            data4_nodb = "data5";
                                            data5_nodb = "data6";
                                            data6_nodb = "data7";


                                            calc[x_c99][0][3] = data4_nodb;
                                            calc[x_c99][0][4] = data5_nodb;

                                            callback(data5_nodb,data6_nodb,etc..);

                                        }                                           

                                        start_query2(function() {

                                            console.log("start_query2 OK!");    

                                                function start_query3(callback) {


                                                    for(...){

                                                            // do something
                                                        }

                                                        callback(vars...);                                              
                                                    }

                                            start_query3(function() {
                                                console.log("start_query3 OK!");    
                                            });

                                        });
                                    }); 
                            }

                        callback(calc); 

                };


                function mach2(callback){

                    mach1(function() {

                        console.log("mach1 OK!");

                        for(...){                                                                                               
                        // do something                                                         
                        }   

                    });         

                    callback(calc,error_buy);

                };                          

                mach2(function() {
                console.log("mach2 OK 2!");                                         
                });
4

1 に答える 1