2016-07-06 7 views
0

初めてasync.jsを使用して、私が何かを見逃しているような気がしています。私はブルートフォースで働く状態になっていて、他のデータのセット。私がここに見ていないものがあるかどうか知りたいです。async.jsでのeachOfのチェイン

私はそれぞれが配列を含むオブジェクトの配列を持っています。私はサブアレイを繰り返し、mongoへの呼び出しでそれを使用し、すべてが返された後に結果で何かをしたいと思います。データは次のようになります。コードで

データ

productVersions: [ 
    versionA: { 
     relevantField: [ 
      { 
       relevantId: value 
      }, 
      { 
       relevantId: value 
      } 
     ] 
    }, 
    versionB: { 
     relevantField: [ 
      { 
       relevantId: value 
      }, 
      { 
       relevantId: value 
      }, 
      { 
       relevantId: value 
      } 
     ] 
    } 
]; 

私はproductVersionsrelevantFieldで各オブジェクトの呼び出しをしたいと、すべてのコールの後、両方のバージョンのために作られていると、いくつかのものを行います結果。コードは次のようになります。

コードこれは今の機能であることを起こる

async.forEachOf(productVersions, function(version, versionIndex, versionCallback){ 
    async.forEachOf(relevantField, function(object, objectIndex, objectCallback){ 
     Users.findById(object.relevantId, function(err, model){ 
      // get some information from mongo 
      objectCallback(); 
     }); 
    }, function(){ 
     versionCallback(); 
    }); 
}, function(err){ 
    // Do something with all the results 
}); 

私がいたので、タイミングと運のと呼び出した場合だ気持ちを持っているより多くのデータがあった場合の遅くそれはうまくいかないでしょう。私はここで何か悪いことをしていますか?より良いアプローチがありますか?

答えて

0

async私の個人的な好みによって私はこれらの機能を分けてもらえますが、メンテナーは私にはうまく見えます。また、このフローを管理するためにウォーターフォール/シリーズの使用を検討することもできます

function processRelevantField(object, objectIndex, objectCallback){ 
    Users.findById(object.relevantId, function(err, model){ 
     // get some information from mongo 
     objectCallback(); 
    }); 
} 

function processVersion(version, versionIndex, versionCallback){ 
    async.forEachOf(relevantField, processRelevantField, function(){ 
     versionCallback(); 
    }); 
} 

async.forEachOf(productVersions, processVersion, function(err){ 
    // Do something with all the results 
}); 
関連する問題