Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 367
RGe Avatar asked Dec 08 '16 10:12

RGe


2 Answers

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
});
like image 197
Hyddan Avatar answered Oct 13 '22 22:10

Hyddan


you can use promise as :

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

function os_func() {
    this.execCommand = function (cmd) {
        return new Promise((resolve, reject)=> {
           exec(cmd, (error, stdout, stderr) => {
             if (error) {
                reject(error);
                return;
            }
            resolve(stdout)
           });
       })
   }
}
var os = new os_func();

os.execCommand('pwd').then(res=> {
    console.log("os >>>", res);
}).catch(err=> {
    console.log("os >>>", err);
})
like image 20
Sourbh Gupta Avatar answered Oct 13 '22 23:10

Sourbh Gupta