我正在使用节点js来开发我的应用程序。在控制器中,我使用了for循环然后编写了一些代码,但是在for循环中我正在执行查询。所以在查询完全执行之前,代码在循环执行之后完成。例如,见下文。
var commcount = [];
for (var j = 0, len = exlist.length; j < len; j++) {
console.log('exlist[j].id '+exlist[j].id);
ExModel.find({EXModel_ID:exlist[j].id, VALUE: {'$ne':''}},{_id:0}, {sort: {CREATION_DATE: -1}}, function(err1, examplist) {
if (err1) {
console.log('sub error '+err1);
commcount.push(0);
} else {
console.log('examplist.length '+examplist.length);
commcount.push(examplist.length);
}
});
}
console.log('commcount length '+commcount.length);
在上面的代码中,我们假设exlist.length为5,因此for循环将执行5次。在输出控制台中,First exlist [j] .id值显示全部5次,然后将commcount长度值显示为0,然后只显示examplist.length值diplaying。因此,在查询执行for循环之前,for循环正在执行for循环之后。请帮我解决这个问题。我希望for循环中的查询结果列表的长度存储在数组中,并希望在for循环后显示那些数组值。
答案 0 :(得分:0)
首先你应该知道你正在调用异步函数,无论你得到的结果是否正确,异步函数都会在单独的线程中运行,我们不能保证out out。您的代码与以下代码类似,让我们运行以下代码
function run(){
console.log("d");
setTimeout(function(){
console.log("a");
setTimeout(function(){
console.log("b");
});
});
console.log("c");
}
输出为d c a b
。