var sys = require('sys');
var exec = require('child_process').exec;
var cmd = 'whoami';
var child = exec( cmd,
function (error, stdout, stderr)
{
var username=stdout.replace('\r\n','');
}
);
var username = ?
Comment puis-je trouver un nom d'utilisateur en dehors de la fonction exec?
Vous pouvez passer la fonction exec un rappel. Lorsque la fonction exec détermine le nom d'utilisateur, vous appelez le rappel avec le nom d'utilisateur.
var child = exec(cmd, function(error, stdout, stderr, callback) {
var username = stdout.replace('\r\n','');
callback( username );
});
En raison de la nature asynchrone de JavaScript, vous ne pouvez pas faire quelque chose comme ceci:
var username;
var child = exec(cmd, function(error, stdout, stderr, callback) {
username = stdout.replace('\r\n','');
});
child();
console.log( username );
En effet, la ligne console.log( username );
n'attendra pas que la fonction ci-dessus soit terminée.
Explication des rappels:
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.
Vous pouvez écrire l'instruction "exec" dans une fonction qui a un rappel ... Comme ceci
var sys = require('sys');
var exec = require('child_process').exec;
var cmd = 'whoami';
function execChild(callback){
var child = exec( cmd,
function (error, stdout, stderr)
{
username=stdout.replace('\r\n','');
callback(username);
}
)};
execChild(function(username){
console.log(username);
});