gpt4 book ai didi

javascript - 如何使用 Bluebird promise Node 的 child_process.exec 和 child_process.execFile 函数?

转载 作者:IT老高 更新时间:2023-10-28 21:51:56 29 4
gpt4 key购买 nike

我正在使用 Node.js 下的 Bluebird Promise 库,非常棒!但我有一个问题:

如果您查看 Node 的文档 child_process.execchild_process.execFile你可以看到这两个函数都返回了一个 ChildProcess 对象。

那么推荐的方法是什么?

请注意以下工作(我得到一个 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);
});

但是,如果我使用 exec 函数的 promise 版本(上面的 execAsync),那么返回值将是一个 promise ,而不是 ChildProcess 对象。这是我要说的真正问题。

最佳答案

我建议使用语言中内置的标准 JS promise ,而不是像 Bluebird 这样的附加库依赖项。

如果您使用的是 Node 10+,the Node.js docs推荐使用util.promisify返回 Promise<{ stdout, stderr }>目的。请参阅下面的示例:

const util = require('util');
const exec = util.promisify(require('child_process').exec);

async function lsExample() {
try {
const { stdout, stderr } = await exec('ls');
console.log('stdout:', stdout);
console.log('stderr:', stderr);
} catch (e) {
console.error(e); // should contain code (exit code) and signal (that caused the termination).
}
}
lsExample()

首先从 stderr 处理错误.

关于javascript - 如何使用 Bluebird promise Node 的 child_process.exec 和 child_process.execFile 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30763496/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com