Complexe child_process无法使用Promise bluebird

时间:2016-01-28 12:51:41

标签: javascript node.js bluebird child-process electron

我不想使用node.js https://nodejs.org/api/child_process.html中的child_process执行shell命令,我正在使用React JS进行电子程序。

我想用蓝鸟做一个承诺,我的功能可以工作但只是为了一个小命令,如' ls'但是如果我想在一个文件夹中执行一个简单的hello world程序,我想做一些像cd localbuild/login/ && java Main这样的事情。它正在我的终端上工作。当我尝试在我的函数中执行此操作时出现此错误:promise rejected: Error: spawn cd localbuild/login/ ENOENT closing code: -2

这是我的功能:

_compile(command){

    var Promise = require('bluebird');
    var exec = require('child_process').execFile;

    var pathFile = "cd localbuild/login/";

    function promiseFromChildProcess(child) {
      return new Promise(function (resolve, reject) {
        child.addListener("error", reject);
        child.addListener("exit", resolve);
      });
    }
    var child = exec(pathFile+ " && "+command);

    //var child = exec('ls'); // It works

    promiseFromChildProcess(child).then(function (result) {
      console.log('promise complete: ' + result);
    }, function (err) {
      console.log('promise rejected: ' + err);
    });

    child.stdout.on('data', function (data) {
      console.log('stdout: ' + data);
    });
    child.stderr.on('data', function (data) {
      console.log('stdout: ' + data);
    });
    child.on('close', function (code) {
      console.log('closing code: ' + code);
    });
}

你能帮我吗?

1 个答案:

答案 0 :(得分:1)

您要导入的child_process库的功能是execFile,但您使用它来运行shell命令而不是运行可执行文件。

只需改变:

var exec = require('child_process').execFile;

要:

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

它应该有效!