听起来您想从通话中返回两件事:
- 子进程
- 当ChildProcess完成时解决的承诺
那么,“推荐这种功能的推荐方法”呢? 不要 。
您不符合常规。承诺返回函数将返回承诺,仅此而已。您可以返回一个具有两个成员的对象(ChildProcess和Promise),但这只会使人们感到困惑。
我建议调用unpromisified函数,并基于返回的childProcess创建一个promise。(也许将其包装到一个辅助函数中)
这样,对于下一个阅读该代码的人来说是非常明确的。
就像是:
var Promise = require('bluebird');var exec = require('child_process').execFile;function promiseFromChildProcess(child) { return new Promise(function (resolve, reject) { child.addListener("error", reject); child.addListener("exit", resolve); });}var child = exec('ls');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('stderr: ' + data);});child.on('close', function (pre) { console.log('closing pre: ' + pre);});


