使用带有nodejs的promise来从两个嵌套查询中返回一个对象

我需要从两个查询的结果构build一个对象,但我得到了undefined。 从第一个查询返回的每个对象,我需要设置一个列表与第二个查询。 但是当我需要做一些嵌套的链式查询结果的实现时,我遇到了困难。

两个查询都在工作并返回正确的值。

我的问题涉及到一些逻辑和“不知道如何使用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); }); 

你可以使用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 } }) }) ); }); 

问题是你没有在第二个承诺返回任何东西,这就是为什么你没有定义。

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

要解决这个问题,您需要通过汇总myDAO.getBdataFromA结果来返回值。 你可以使用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); }); }