Search code examples
javascriptnode.jsfunctionexec

nodejs wait for exec in function


I like to integrate exec from nodejs in a custom function to handle all the errors in this one function.

const exec = require('child_process').exec;

function os_func() {
    this.execCommand = function(cmd) {
        var ret;
        exec(cmd, (error, stdout, stderr) => {
            if (error) {
                console.error(`exec error: ${error}`);
                return;
            }
            ret = stdout;
        });
        return ret;
    }
}
var os = new os_func();

This function returns undefined because exec isn't finished when the value returns. How can i solve that? Can i force the function to wait for exec?


Solution

  • Since the command is executed asynchronously you will want to use a callback to handle the return value once the command has finished executing:

    const exec = require('child_process').exec;
    
    function os_func() {
        this.execCommand = function(cmd, callback) {
            exec(cmd, (error, stdout, stderr) => {
                if (error) {
                    console.error(`exec error: ${error}`);
                    return;
                }
    
                callback(stdout);
            });
        }
    }
    var os = new os_func();
    
    os.execCommand('SomeCommand', function (returnvalue) {
        // Here you can get the return value
    });