Ответ 1
Вы можете передать функции exec функции обратного вызова. Когда функция exec определяет имя пользователя, вы вызываете обратный вызов с именем пользователя.
var child = exec(cmd, function(error, stdout, stderr, callback) {
var username = stdout.replace('\r\n','');
callback( username );
});
Из-за асинхронного характера JavaScript вы не можете сделать что-то вроде этого:
var username;
var child = exec(cmd, function(error, stdout, stderr, callback) {
username = stdout.replace('\r\n','');
});
child();
console.log( username );
Это связано с тем, что строка console.log( username );
не будет ждать завершения вышеописанной функции.
Объяснение обратных вызовов:
var getUserName = function( callback ) {
// get the username somehow
var username = "Foo";
callback( username );
};
var saveUserInDatabase = function( username ) {
console.log("User: " + username + " is saved successfully.")
};
getUserName( saveUserInDatabase ); // User: Foo is saved successfully.