Tengo que escribir el script de Node.js usando promise.all() que comprobará que el entorno tiene docker, git, npm, nvm y node.js. Para cada herramienta, escriba en stdout la versión de la herramienta. Si algunas herramientas no existen, escriba al mensaje stderr al respecto y finalice el proceso con el código de salida correcto.
Mi código se ve así:
const util = require("util"); const exec = util.promisify(require("child_process").exec); async function getVersion(env) { try { const { stdout } = await exec(env); console.log(stdout); } catch (error) { console.error(error.stderr); } } (async function () { const fileVersion = [ "node --version", "docker --version", "nvm version", "git --version", "npm --version", ]; const results = await Promise.all(fileVersion); for (const element of results) { getVersion(element); } })();Sé que en ese código promise.all() no está jugando ningún papel, no estoy familiarizado con promise.all() y, por favor, ¿alguien podría mostrarme un ejemplo de cómo hacerlo?
El método Promise.all() en realidad toma una iteración de promesas como entrada (en su código solo está pasando una matriz de cadenas) y devuelve una única promesa que se resuelve en una matriz de los resultados de las promesas de entrada pasadas al función. Esta promesa devuelta se resolverá cuando se hayan resuelto todas las promesas pasadas (o si el iterable pasado no contiene promesas como en su caso). También se rechazará inmediatamente después de que cualquiera de las promesas de entrada pasadas se rechace o las no promesas arrojen un error, y se rechazará con este primer mensaje de rechazo/error.
Si realmente desea beneficiarse del método Promise.all() , debe pasarle una serie de promesas en lugar de la serie de cadenas que está pasando en este momento.
const util = require("util"); const exec = util.promisify(require("child_process").exec); async function getVersion(env) { try { const { stdout } = await exec(env); console.log("env is" + stdout); return stdout; } catch (error) { console.error(error.stderr); } } (async function () { const fileVersion = [ "node --version", "docker --version", "nvm version", "git --version", "npm --version", ]; const results = await Promise.all(fileVersion.map(x => getVersion(x))); console.log(results); })();