Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js mongodb数据在带有回调的for循环中异步?_Node.js_Mongodb_For Loop - Fatal编程技术网

Node.js mongodb数据在带有回调的for循环中异步?

Node.js mongodb数据在带有回调的for循环中异步?,node.js,mongodb,for-loop,Node.js,Mongodb,For Loop,下面是一个没有mongodb的异步代码示例。问题是,如果我用db.collection.find()替换变量(data1_nodb,…);函数,在结束时接收到所有需要的db VAR,并且for()循环结束时不正确。希望有人能帮忙。骨性关节炎 var calc = new Array(); function mach1(callback){ error_buy = 0;

下面是一个没有mongodb的异步代码示例。问题是,如果我用db.collection.find()替换变量(data1_nodb,…);函数,在结束时接收到所有需要的db VAR,并且for()循环结束时不正确。希望有人能帮忙。骨性关节炎

    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!");                                         
                });
var calc=new Array();
函数mach1(回调){
错误=0;
//一些Var
对于(变量x_c99=0;x_c99
您需要使用
集合的async特性。find()
方法,并等待它们全部完成。一种非常流行的方法是使用模块。此模块允许您运行多个并行任务,并使用其
async.parallel()
方法等待它们完成:

async.parallel([
  function (callback) {
    db.foo.find({}, callback);
  },
  function (callback) {
    db.bar.find({}, callback);
  },
  function (callback) {
    db.baz.find({}, callback);
  }
], function (err, results) {
  // results[0] is the result of the first query, etc
});

我尝试了异步写入和异步模块,但是在瀑布模式下。这一切都是一样的,start_query2函数不会从start_query函数获取变量来继续。我从不使用并行模式,因为它不会等待。我错了?