¿Cómo puedo usar una devolución de llamada para una promesa correctamente para obtener el resultado de un ejecutivo de nodo en la función condole.log() ?
import { exec } from 'child_process'; const check = () => { exec(`...`, (err, stdout) => { if (err) { return false } else { return true } }) } console.log(check()) // getting undefined Intenté usar .on('exit') pero ninguno funcionó... me encantaría obtener ayuda aquí. ¡¡GRACIAS!!
Debe envolver la llamada en una promesa para obtener la devolución de la devolución de llamada:
import { exec } from 'child_process' const check = () => { return new Promise((resolve) => { exec(`...`, (err, stdout) => { if (err) { resolve(false) } else { resolve(true) } }) }) } Al no rechazar un error en la devolución de llamada, puede resolver la promesa y devolver falso en su lugar. Si usó el parámetro de reject en la llamada de promesa, necesitaría manejar ese error encadenando una llamada .catch() . Para mantener la implementación similar a la que ya tiene, la omití y en su lugar resolví la promesa con false .
Luego puede usar .then() en la llamada para check y obtener los resultados deseados:
check().then(res => { console.log(res) })Puede usar el constructor Promise para hacerlo usted mismo o puede usar el módulo util para convertir una función de invocación de devolución de llamada en una que devuelve una promesa.
Usando el módulo de utilidad
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();Envolviendo con el constructor 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); } }); }); };