You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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'

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:18:03