我需要从两个查询的结果中构建一个对象,但我未定义。从第一个查询返回的每个对象,我需要设置一个带有第二个查询的列表。但是当我需要使用链接查询的结果嵌套实现时,我很难使用promises。
两个查询都正常工作并返回正确的值。
我的问题涉及一些逻辑和不知道如何使用javascript和promises"的问题。
我感谢任何提示
我的代码:
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 :(得分: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
}
})
})
);
});
答案 1 :(得分:0)
问题是你没有在第二个承诺中返回任何东西,这就是你未定义的原因。
.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);
});
}