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

如何在Node.js中等待shell命令执行完成后返回指定值?

解决方案

你的问题核心是回调式的exec不会让async函数等待命令执行完成,所以需要把回调风格的API转为Promise风格,用await等待命令执行完毕后再返回1。

修改后的代码

const { exec } = require('child_process');
const { promisify } = require('util');
// 将回调版exec转换为Promise版本
const execPromise = promisify(exec);

const speed = async () => {
  try {
    // 等待speedtest命令完全执行完成
    const { stdout, stderr } = await execPromise('speedtest');
    
    if (stderr) {
      console.log(`stderr: ${stderr}`);
    }
    console.log(`stdout: ${stdout}`);
    
    // 命令执行完成后返回1
    return 1;
  } catch (error) {
    console.log(`error: ${error.message}`);
    // 出错时也返回1,可根据需求调整
    return 1;
  }
};

// 调用示例:后续代码放在then里执行
speed().then(result => {
  console.log('命令执行完成,返回值:', result);
  // 这里写需要延迟执行的后续代码
});

关键说明

  • 用util.promisify把Node.js原生的回调式exec转成Promise函数,这样async函数就能通过await等待命令执行结束。
  • 原代码里console.log(stdout)写在exec回调外,会因为异步回调的特性提前执行,现在放在await之后,确保拿到正确输出且命令执行完毕才运行。
  • 无论命令成功或失败,最终都会返回1,满足你在命令完全执行后返回1的需求。

内容的提问来源于stack exchange,提问作者Belitho Xavier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:41:31