节点JS两个foreach意外

时间:2016-10-26 14:11:26

标签: node.js

我有两个来自数据库的数组,这是一个样本 我尝试在foreach中做一些事情,但答案不是我预期的。

为什么conso.log打印序列不是

  

输出循环0
  在循环0中   在循环1中   在循环2中   在循环3中   在循环4中   out loop 1
  在循环0中   在循环1中   在循环2中   在循环3中   在循环4中   。   。   

[我的代码]

modules.dbCmder.query(DefaultDB, DefaultDB, strSQL, [], function (data) {
        data.forEach(function (value, index, array) {
            console.log('out loop ' + index);
            modules.dbCmder.query(DefaultDB, DefaultDB, strSQL2, [], function (res) {
                data.forEach(function (value, index, array) {
                    console.log('in loop ' + index);
                });
            });
        });
    });

[代码结果]

out loop 0
out loop 1
out loop 2
out loop 3
out loop 4
in loop 0
in loop 1
in loop 2
in loop 3
in loop 4
in loop 0
in loop 1
in loop 2
in loop 3
in loop 4
in loop 0
in loop 1
in loop 2
in loop 3
in loop 4

1 个答案:

答案 0 :(得分:0)

基本上,Javascript将docker exec -it trackware-web bash 函数调用放在事件堆栈上,然后在当前modules.dbCmder.query中继续。因此,外部forEach()会一直运行直到完成,而对forEach()的4次调用会堆叠起来,然后依次解决。这就是“为什么”这种情况发生的答案。

您的解决方案是运行控制流库,例如async,以确保在下一个外部query之前解析query

这样的东西
forEach
相关问题