如何在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
相关产品推荐
相关产品推荐

