使用promise.all()验证环境



我必须使用promise.all((编写Node.js脚本,该脚本将检查环境是否具有docker、git、npm、nvm和Node.js。对于每个工具,都要将工具版本写入stdout。若不存在某些工具,请写入有关它的stderr消息,并使用正确的退出代码完成该过程。

我的代码如下:

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);
}
})();

我知道在那个代码promise.al((中没有扮演任何角色,我不熟悉promise.all((,请有人给我举个例子如何做?

Promise.all()方法实际上以可迭代的Promise作为输入(在代码中,您只是传递一个字符串数组(,并返回一个Promise,它解析为传递给函数的输入Promise的结果数组。这个返回的promise将在所有传递的promise都已解析时解析(或者如果传递的iterable不包含类似于您的情况的promise(。它还将在任何传递的输入promise拒绝或非promise抛出错误时立即拒绝,并将使用第一个拒绝消息/错误进行拒绝。

如果您想真正受益于Promise.all()方法,您需要向它传递一个promise数组,而不是现在传递的字符串数组。

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);
})();

相关内容

  • 没有找到相关文章

最新更新