首页 > 解决方案 > Nodejs Exec不执行

问题描述

我正在使用 Nodejs 创建一个测试器模块。所以我需要使用exec。此代码有效并且运行良好:

const { exec } = require('child_process');

var nb_test = 1
var return_array = [nb_test];
var finished = 0;

var i = 0;

while (i < nb_test)
{
    var env = { "NB_MALLOC": i.toString()};
    console.log("coucou");
    console.log(i);
    exec("ls", { env }, function (error, stdout, stderr) {
        console.log(stdout);
        return_array[i] = { stdout, error, stderr };
        finished++;
    });
    i++;
}

但如果我最后有这个,什么都不执行,代码永远不会进入回调

 j = 0
while (j < nb_test){}

任何想法为什么?

标签: node.jsexec

解决方案


你的回调永远不会运行,因为你永远不会退出当前的事件循环。像你的回调这样的异步操作exec被搁置在当前循环完成后执行。所以 node 将执行整个脚本中的所有同步代码,只有在这之后它才会开始处理回调。通过在脚本中放置一个永无止境的while循环,您可以让 Node 无法执行任何回调。while 循环只是旋转,回调耐心地等待它完成。目前尚不清楚您为什么想要最后一个循环,但希望这将帮助您了解它导致的行为。


推荐阅读