如何等待节点执行响应?

How to wait for node exec response?

我如何才能正确使用回调函数来从 condole.log() 函数中的 node exec 中获取结果?

import { exec } from 'child_process';
const check = () => {
    exec(`...`, (err, stdout) => {
        if (err) {
         return false         
        }
        else {
         return true
        }
    })
}
console.log(check()) // getting undefined

我试过使用 .on('exit') 但 none 有效...很想在这里得到一些帮助。谢谢!!

您需要将调用包装在承诺中以获得回调的 return:

import { exec } from 'child_process'

const check = () => {
  return new Promise((resolve) => {
    exec(`...`, (err, stdout) => {
        if (err) {
         resolve(false)       
        }
        else {
         resolve(true)
        }
    })
  })
}

通过不拒绝回调中的错误,您可以改为解析 promise 和 return false。如果您在 promise 调用中使用了 reject 参数,则需要通过链接 .catch() 调用来处理该错误。为了使实现与您已有的相似,我省略了它,而是用 false.

解决了承诺

然后您可以在对 check 的调用中使用 .then() 并获得所需的结果:

check().then(res => {
  console.log(res)
})

您可以使用 Promise 构造函数自己完成,也可以使用 util 模块将回调调用函数转换为 returns promise

使用 util 模块

const util = require("util");
const exec = util.promisify(require("child_process").exec);

const check = async () => {
  const output = await exec(`echo hi`);

  console.log(output);
};

check();

使用 Promise 构造函数包装

import { exec } from "child_process";
const check = async () => {
  return new Promise((resolve, reject) => {
    exec(`echo hi`, (err, stdout) => {
      if (err) {
        reject(err);
      } else {
        resolve(stdout);
      }
    });
  });
};