nodejs 在函数中等待 exec

新手上路,请多包涵

我喜欢将来自 nodejs 的 exec 集成到一个自定义函数中,以处理这个函数中的所有错误。

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

此函数返回 undefined,因为当值返回时 exec 尚未完成。我该如何解决?我可以强制函数等待 exec 吗?

原文由 RGe 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

由于命令是异步执行的,因此您需要使用 回调 来处理命令执行完毕后的返回值:

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

原文由 Hyddan 发布,翻译遵循 CC BY-SA 3.0 许可协议

你可以使用 promise 作为:

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

原文由 Sourbh Gupta 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题