如何解决如何在 Node.js 中不等待完成子进程?
实际上我在异步函数中运行我的 exec 任务。执行后,软件启动并循环运行。
执行此操作后,我的 node.js 应用程序停止执行代码。
如何开始从 node.js 运行另一个应用程序并忽略结果并继续执行代码?
import util = require('util');
const exec = util.promisify(require('child_process').exec);
export class ExecClass{
public static async run(...parameters: (number | string)[]) {
const app=parameters[0];
parameters=parameters.slice(1);
const cmd = app+ " " + parameters.join(" ");
const { stdout,stderr } = await exec(cmd);
}
}
编辑:
在调用代码之后,我只是在我的数据库中进行了一些编辑。
我的调用代码:
import {ExecClass} from "./exec-class";
async function run() {
await ExecClass.run(cmd,data.id,data.startDate,data.endDate,data.idx);
}
解决方法
我没有时间对此进行测试,但看起来您需要做的就是从 exec() 调用中删除 await 关键字。您也不再需要 run 函数上的 async 修饰符。
import util = require('util');
const exec = util.promisify(require('child_process').exec);
export class ExecClass{
public static run(...parameters: (number | string)[]) {
const app=parameters[0];
parameters=parameters.slice(1);
const cmd = app+ " " + parameters.join(" ");
const { stdout,stderr } = exec(cmd);
}
}
现在您将无法再将 exec 视为传统的同步函数,因此您必须将其改回回调格式:
import util = require('util');
const exec = util.promisify(require('child_process').exec);
export class ExecClass{
public static run(...parameters: (number | string)[]) {
const app=parameters[0];
parameters=parameters.slice(1);
const cmd = app+ " " + parameters.join(" ");
exec(cmd,({ stdout,stderr }) => {
// do something with stdout or stderr here
});
}
}
但您最希望保持面向承诺的流程,以便我们可以将您的整个操作包装在一个承诺中:
import util = require('util');
const exec = util.promisify(require('child_process').exec);
export class ExecClass{
public static run(...parameters: (number | string)[]) {
return new Promise( (resolve,reject) => {
const app=parameters[0];
parameters=parameters.slice(1);
const cmd = app+ " " + parameters.join(" ");
exec(cmd,stderr }) => {
resolve({stdout,stderr});
});
})
}
}
现在您可以在调用进程继续执行操作的同时等待在父调用代码中解析承诺。此外,您可以处理调用代码上的承诺。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。