javascript - 复杂的 child_process 无法与 Promise bluebird 一起使用

标签 javascript node.js bluebird child-process electron

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

我想用 bluebird 做一个 Promise,我的函数可以工作,但只适用于像“ls”这样的小命令,但是如果我想在文件夹中执行一个简单的 hello world 程序,我想做一些类似的事情:cd localbuild/login/&& java Main。它正在我的终端上运行。当我尝试在我的函数中执行此操作时,出现此错误:promiserejected:Error:spawn cd localbuild/login/ENOENT opening 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);
    });
}

你能帮我吗?

最佳答案

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

只需更改:

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

致:

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

它应该可以工作!

关于javascript - 复杂的 child_process 无法与 Promise bluebird 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35062031/

相关文章:

javascript - 编写 javascript 库时结合使用 CoffeeScript 和 Node.js 的最佳方法是什么?

node.js - Webpack 不生成 build.js

node.js - 在node.js中没有socket.io的情况下将消息发送到特定套接字

node.js - Bluebird 在源代码中抛出异常

javascript - 使用 Angularjs 检查值是否大于或小于用户输入的值

javascript - 如何正确使用 async/await 函数?

javascript - 使用 jQuery 在 iframe 中重新加载页面

javascript - 基于巴塞罗那市时区的代码

javascript - 重写这个弗兰肯斯坦 promise 链

node.js - 使用 SinonJs 和 Mocha 测试包含 Promise 代码块的 Restify 路由处理程序