如何在C2环境下获取Node.js child_process exec的异步返回值
child_process的exec是异步回调API,无法直接在同步代码中return结果,原来你看到的先返回0后打印结果,就是因为exec异步执行,回调函数会在同步代码执行完成后才触发,你可以按照下面的方式封装为Promise来实现结果返回:
第一步:封装exec为Promise版本
const { exec } = require("child_process"); function execCommand(cmd) { return new Promise((resolve, reject) => { exec(cmd, (error, stdout, stderr) => { if (error) { reject(new Error(`执行错误: ${error.message}`)); return; } if (stderr) { reject(new Error(`标准错误输出: ${stderr}`)); return; } // 执行成功直接返回stdout结果 resolve(stdout); }); }); }
两种使用方式
1. Promise 链式调用
execCommand("ls -la") .then(result => { // 这里可以直接拿到执行结果,按需return给上层逻辑 console.log("命令执行结果:", result); }) .catch(err => { console.error("执行失败:", err.message); });
2. async/await 语法(更贴近同步编码习惯)
async function runCmd() { try { const result = await execCommand("ls -la"); // 这里可以直接return结果给函数调用方 console.log("命令执行结果:", result); return result; } catch (err) { console.error("执行失败:", err.message); throw err; } } runCmd();
注意:由于是异步逻辑,所有使用命令执行结果的代码都需要放在
async函数内通过await获取,或者通过.then回调处理,不能直接在同步代码中获取结果。
内容的提问来源于stack exchange,提问作者dani 'SO learn value newbies'
相关产品推荐
相关产品推荐

