Я работаю с 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.info("coucou");
console.info(i);
exec("ls", { env }, function (error, stdout, stderr) {
console.info(stdout);
return_array[i] = { stdout, error, stderr };
finished++;
});
i++;
}
но если бы у меня было это в конце, ничего не выполняется, код никогда не входит в обратный вызов
j = 0
while (j < nb_test){}
Любая идея, почему?





Вы не увеличиваете j внутри цикла while. Поэтому он никогда не выйдет.
Попробуйте добавить j++; внутри скобок while (j < nb_test){}.
Ваши обратные вызовы никогда не выполняются, потому что вы никогда не выходите из текущего цикла событий. Асинхронные действия, такие как обратный вызов exec, откладываются для выполнения после завершения текущего цикла. Таким образом, узел выполнит весь синхронный код во всем скрипте и только после этого начнет обрабатывать обратные вызовы. Помещая бесконечный цикл while в сценарий, вы лишаете Node возможности выполнять какие-либо обратные вызовы. Цикл while просто вращается, а обратные вызовы терпеливо ждут его завершения. Непонятно, зачем вам нужен этот последний цикл, но, надеюсь, это поможет вам понять поведение, которое он вызывает.
Спасибо, вот и все! Я думал, что Node обработает обратный вызов, когда обратный вызов скажет, что он завершен, и поэтому я мог подождать с циклом while!