节点J在执行循环时遇到问题

时间:2016-12-21 05:57:42

标签: node.js

我正在使用节点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循环后显示那些数组值。

1 个答案:

答案 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