2016-08-23 9 views
0

node.jsにmongoDBを使用するコードを作成しました。すべて正常に動作していますが、ネストされたループを使用すると、破損して適切な値が返されません。フェッチすべてのデータは以下のように起こるように、私のコンソールメッセージでnode.jsで非同期を使用する方法

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('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>'); 
All Values; 
console.log('<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<'); 

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

    All Values 

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

を示す:

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

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

どのようにあなたのコードでも動作しますか?私は 'for(var i in fetchAllDB1) 'を意味します。' i'はオブジェクトでなければなりませんが、整数として使用しますか? @Stanのコメントに追加するのは – sed

+0

、DB2とは何ですか?コレクションまたは実際のデータベース?それがDBなら、あなたは何を照会していますか?私は、dbにfindメソッドがあることをドキュメントではわかりません... –

+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

関連する問題