Nodejs Exec не выполняется - PullRequest
0 голосов
/ 25 апреля 2018

Я работаю с 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){}

Любая идея, почему?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Ваши обратные вызовы никогда не запускаются, потому что вы никогда не выходите из текущего цикла событий. Асинхронные действия, такие как обратный вызов exec, отложены для выполнения после завершения текущего цикла. Таким образом, узел выполнит весь синхронный код во всем скрипте и только после этого начнет обработку обратных вызовов. Помещая в скрипт бесконечный цикл while, вы исключаете возможность выполнения Node каких-либо обратных вызовов. Цикл while просто вращается, и обратные вызовы терпеливо ждут его завершения. Непонятно, зачем вам нужен последний цикл, но, надеюсь, это поможет вам понять поведение, которое оно вызывает.

0 голосов
/ 25 апреля 2018

Вы не увеличиваете j внутри цикла while.Поэтому он никогда не завершится.

Попробуйте добавить j++; в фигурные скобки while (j < nb_test){}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...