我们如何从node.js中的callback函数访问variables?

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 = ? 

如何从exec函数中查找外部用户名?

你可以传递一个callback的exec函数。 当exec函数确定用户名时,用用户名调用callback。

  var child = exec(cmd, function(error, stdout, stderr, callback) { var username = stdout.replace('\r\n',''); callback( username ); }); 

由于JavaScript的asynchronous特性,你不能这样做:

  var username; var child = exec(cmd, function(error, stdout, stderr, callback) { username = stdout.replace('\r\n',''); }); child(); console.log( username ); 

这是因为console.log( username ); 不会等到上面的function完成。

callback的解释:

  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. 

你可以在有callback的函数中写入“exec”语句… Like This

 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); }); 

或者你可以在http://www.node-console.com/script/returning-username上在线试试