我对node.js很新,这是我的问题
我在这里有一组嵌套的地图(我也尝试过使用for-each)。 所有"得到......"嵌套的方法返回由我定义的promise。我必须循环遍历方法返回的数据并用它来调用下一个" get .."方法(存在依赖性)。完成整个嵌套循环后," allobj"数组应该有我的最终结果,并且我试图在完成所有循环后返回它。到目前为止,我还没有运气,因为返回一个空数组。
var allobj = new Array();
var catcount = 0;
//categories.forEach(function(category){
var p = categories.map(function(category,index,array){
catcount++;
return gettests(runid,category).then(function(tests){
//console.log(tests.sort().reverse()); //this is sync
//tests.forEach(function(test){
var t = tests.map(function(test,index,array){
return getmetriccategories(runid,category,test).then(function(data){
//console.log(data);
//data.forEach(function(mc){
var d = data.map(function(mc,index,array){
return getmetrics(runid,category,test,mc).then(function(data1){
var x = data1.map(function(metric,index,array){
allobj.push(metric);
return metric;
});
});
});
})
})
})
})
//return when all nested loops are done
res.send(allobj);
答案 0 :(得分:0)
您的函数getmetriccategories
和getmetrics
返回Promises,至少它们的返回值似乎有一个then
方法,这是一个指标。这意味着,它们异步工作。因此,map
调用不直接返回结果,而是返回Promises数组。要等待所有这些Promise得到满足(这意味着异步函数已完成),您可以使用Promise.all
函数:
Promise.all(data.map(...))
.then(function (result) {
res.send(result)
})
如您所见,Promise.all
会返回新的承诺,因此您可以使用then
来接收结果并使用res.send
发送。