2017-12-13 9 views
1

2つのクエリの結果からオブジェクトを構築する必要がありますが、未定義です。最初のクエリで返された各オブジェクトから、2番目のクエリでリストを設定する必要があります。しかし、クエリの連鎖の結果をネストした実装をいくつか実行する必要がある場合、私は約束事に取り組むのが難しくなります。nodejを持つ約束を使って2つのネストされたクエリからオブジェクトを返します。

両方のクエリが正常に動作しています。

私のここでの問題は、いくつかのロジックと「javascriptと約束事の仕組みを知らない」問題です。

私は任意のヒント

私のコードに感謝:

var aFunction = function(){ 

     //this query return a list of A objects 

     return myDAO.getADataList() 
     .then(function(aDataList){ 

      aDataList.forEach(function(aData){ 

      //this query return a list of B objects to each A object 

      myDAO.getBdataFromA(aData.id) 
       .then(function(bDataList){ 

       //here i want to return a object with both values 

       return { 
        aValue: aData, 
        list : bDataList 
       } 
       }) 
      }) 
     }); 
     } 

     aFunction() 
      .then(function(data){ 
      //here data is undefined 
      console.log(data); 
     }); 

答えて

0

あなたはPromise.allを使用することができます。

return myDAO.getADataList() 
.then(function(aDataList){ 
    return Promise.all(
    aDataList.map(function (aData) { 
     //this query return a list of B objects to each A object 
     return myDAO.getBdataFromA(aData.id) 
     .then(function (bDataList) { 
      //here i want to return a object with both values 
      return { 
      aValue: aData, 
      list: bDataList 
      } 
     }) 
    }) 
); 
}); 
0

問題は、あなたが理由です第二約束で何も返されませんですあなたは未定義になる。あなたはmyDAO.getBdataFromAからの結果を集約することで値を返す必要があり、これを解決するために

.then(function(aDataList){ 
    aDataList.forEach(function(aData){ 
     myDAO.getBdataFromA(aData.id) 

Array.mapPromise.allを使用してこれを行うことができます。

a var aFunction = function(){ 
//this query return a list of A objects 
return myDAO.getADataList() 
    .then(function(aDataList){ 
    var getaDataListPromises = aDataList.map(myDAO.getBdataFromA(aData.id) 
    .then(function(bDataList){ 
     //here i want to return a object with both values 
     return { 
     aValue: aData, 
     list : bDataList 
     } 
    })); 
    return Promise.all(getaDataListPromises); 
    }); 
} 
関連する問題