我无法将数据推入闭包函数内的combineddata数组。我发现我需要使用闭包来处理与数据库相关的程序。我是节点js和javascript的新手。它的异步性质让我陷入这样的困境。任何人都可以帮忙我怎么处理这个问题。
combineddata=[];
if(err){
res.send(err);
}else{
for(i=0;i<data.length;i++){
(function(){
x=i;
teststats.addTestStats.find({Testid:data[x].Testid},function(err,testdata){
if(err){
res.send(err);
}else{
//console.log(testdata+"no"+x+"yes"+i);
console.log(x,i)
stat.push(testdata);
combineddata.push("examplepush");
}
});
})();
}
}
res.send(combineddata);
答案 0 :(得分:0)
我假设&#34;无法推动&#34;您的意思是,您推送到"examplepush"
的{{1}}未显示在您的HTTP响应中。这是因为数据库查询是异步执行的,并且回调中的推送代码实际上在您完成combineddata
并从处理程序返回后运行。
你可以做的是重构你的代码,这样你只需要在那里执行一个查询而不是循环中的几个查询,然后你就可以从数据库查询回调中执行res.send。 / p>
尝试使用类似这样的东西作为构建块而不是for循环:
res.send