使用带有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.map
和Promise.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); }); }