2016-08-23 73 views
0

我在node.js中創建了一個使用mongoDB的代碼。一切工作正常,但是當我使用嵌套循環時,它會中斷並且不會返回正確的值。如何在node.js中使用async

DB1.find({},function(error,fetchAllDB1) { 
    var mainArray = new Array(); 
    for (var i in fetchAllDB1) { 
     if(fetchAllDB1[i].name) { 
      var array1 = new Array(); 
      var array2 = new Array(); 

      array1['name'] = fetchAllDB1[i].name; 
      array1['logo'] = fetchAllDB1[i].logo; 
      array1['desc'] = fetchAllDB1[i].desc;  

      DB2.find({is_featured:'1', brand_id: fetchAllDB1[i]._id}, function(error,fetchDB2) { 
       for (var p in fetchDB2) { 
        var pArr=[]; 
        pArr['_id'] = fetchDB2[p]._id; 
        pArr['name'] = fetchDB2[p].name; 
        pArr['sku'] = fetchDB2[p].sku; 
        pArr['description'] = fetchDB2[p].description; 

        console.log('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>'); 
        console.log(pArr); 
        console.log('<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<'); 
        array2[p]=pArr; 
       } 
       array1['pp']= array2; 
      }); 
      mainArray[i]=array1; 
     } 
    } 
    console.log('######### LAST #########'); 
    console.log(mainArray); 
    console.log('######### LAST #########'); 
}); 

在我的控制檯消息,它顯示

console.log('######### LAST #########'); 

    All Values 

    console.log('######### LAST #########'); 

console.log('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>'); 
All Values; 
console.log('<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<'); 

我想在我的代碼使用異步後,使所有數據取出現如下:

mainarray = 
[ 
    [array1] = All Values 
    [array2] = [0] 
       [1] 
] 

mainarray = 
[ 
    [array1] = All Values 
    [array2] = [0] 
       [1] 
] 
+0

請問你的代碼甚至工作?我的意思是'for(var i在fetchAllDB1)''我'應該是一個對象,但你把它當作一個整數? – sed

+0

添加到@Stan的評論,什麼是DB2?集合還是實際的數據庫?如果是數據庫,你在詢問什麼?我沒有看到文檔中的數據庫有一個查找方法... –

+0

無論如何,你在找什麼是這個庫,你可以在循環中做異步操作。 https://caolan.github.io/async/ – sed

回答

-1

您的代碼非常混亂,過於複雜。

你應該做的是(僞代碼):

DB1.find(foo) // returns one result 
    .then(getFromDB2); 

function getFromDB2 (res){ 
    return DB2.find(res); // make a query here with mongo drivers `$in` 
} 

Mongodb : $in operator vs lot of single queries