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

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

本文关键字:回调 函数 访问 变量 js node 我们      更新时间:2023-09-26
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 函数传递回调。当 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.

您可以在具有回调的函数中编写"exec"语句...喜欢这个

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