2015-12-13 3 views
0

Я видел один и тот же вопрос один раз, но я не могу для жизни меня понять, почему это не работает. У меня есть довольно простая программа ниже, которая должна обернуть функцию exec и вернуть результат. Однако все возвращаемые значения не определены. Вот функция:Node.js execSync возвращает undefined, но console.log работает

var exec = require('child_process').execSync; 

quickexec = function(command) { 
    exec(command, function(error, stdout, stderr) { 
     if(error) { 
      return error; 
     } else { 
      return stdout; 
     } 
    }); 
}; 

Я называю это, как этот console.log(quickexec('echo -n $USER')); и я получаю неопределенную каждый раз. Однако, если я изменю возврат в моей функции на console.log, это сработает. Я думал, что это была проблема асинхронной работы, поэтому я начал использовать execSync, но ничего не изменил.

+0

* «Я думал, что это была проблема асинхронности» *. Почему, по-вашему, вы должны пройти обратный вызов в первую очередь? Кроме того, 'quickexec' не содержит оператора' return'. Какое решение вы ищете? Технически это дубликат [Как вернуть ответ от асинхронного вызова?] (Http://stackoverflow.com/q/14220321/218196) –

ответ

0

quickexec() фактически ничего не возвращает. return внутри него находится в обратном вызове async, который происходит долго после того, как quickexec() уже вернулся. Вы не можете синхронно возвращать асинхронный результат. Это обычная проблема при обучении правильному асинхронному программированию в node.js.

Если вам нужен синхронный результат, вы можете использовать execsync(), но обычно лучшим вариантом является использование асинхронного результата в обратном вызове.

Смежные вопросы