我正在使用 Node.js 下的 Bluebird Promise 库,它非常好用!但我有一个问题:
如果你看一下 Node 的 child_process.exec 和 child_process.execFile 文档,你会发现这两个函数都返回了一个 ChildProcess 对象。
那么如何推荐地将这些函数 promisify 化呢?
请注意,以下代码是可以正常工作的(我得到了一个 Promise 对象):
var Promise = require('bluebird');
var execAsync = Promise.promisify(require('child_process').exec);
var execFileAsync = Promise.promisify(require('child_process').execFile);
但是如何获取原始的Node.js函数的返回值呢?(在这些情况下,我需要能够访问最初返回的ChildProcess对象。)
欢迎提出任何建议!
编辑:
以下是一个使用child_process.exec函数返回值的示例代码:
var exec = require('child_process').exec;
var child = exec('node ./commands/server.js');
child.stdout.on('data', function(data) {
console.log('stdout: ' + data);
});
child.stderr.on('data', function(data) {
console.log('stderr: ' + data);
});
child.on('close', function(code) {
console.log('closing code: ' + code);
});
但是,如果我使用经过 Promise 封装的 exec 函数(上面的 execAsync),那么返回值将是一个 Promise 对象,而不是 ChildProcess 对象。这就是我所说的真正问题。
prg <input >output
的shell运行程序。但现在我必须对所有内容进行shell转义(无论是在Windows还是*nix上)... - Zoltanconst {stdout, stderr} = await exec('echo test')
。 - Andy