How can we access variable from callback function in node.js?

前端 未结 2 1048
陌清茗
陌清茗 2020-12-13 06:26
var sys = require(\'sys\');
var exec = require(\'child_process\').exec;
var cmd = \'whoami\';
var child = exec( cmd,
      function (error, stdout, stderr) 
      {
         


        
相关标签:
2条回答
  • 2020-12-13 07:01

    You can write the "exec" statement in a function that has a callback... 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);
    });
    
    0 讨论(0)
  • 2020-12-13 07:12

    You can pass the exec function a callback. When the exec function determines the username, you invoke the callback with the username.

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


    Due to the asynchronous nature of JavaScript, you can't do something like this:

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

    This is because the line console.log( username ); won't wait until the function above finished.


    Explanation of callbacks:

        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.
    
    0 讨论(0)
提交回复
热议问题