我们如何从node.js中的回调函数中访问变量?

Dev*_*dev 30 javascript callback node.js

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 = ?
Run Code Online (Sandbox Code Playgroud)

如何在exec函数外找到用户名?

Mat*_*orf 31

你可以传递exec函数回调.当exec函数确定用户名时,您使用用户名调用回调.

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


由于JavaScript的异步特性,您无法执行以下操作:

    var username;

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

    child();

    console.log( username );
Run Code Online (Sandbox Code Playgroud)

这是因为该行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.
Run Code Online (Sandbox Code Playgroud)