使用 promise.all() 验证环境
Verify environment using promise.all()
我必须使用 promise.all() 编写 Node.js 脚本来检查环境是否有 docker、git、npm、nvm 和 node.js .对于每个工具,将工具版本写入标准输出。如果某些工具不存在,请写入关于它的 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.all() 没有发挥任何作用,我不熟悉 promise.all() 并且请任何人可以告诉我如何做的例子?
Promise.all()
方法实际上将可迭代的 promise 作为输入(在您的代码中,您只是传递一个字符串数组),returns 一个解析为数组的 Promise传递给函数的输入承诺的结果。当所有传递的承诺都已解决(或者如果传递的 iterable 不包含像您的情况那样的承诺),此返回的承诺将解决。它还将在任何传递的输入承诺拒绝或非承诺抛出错误时立即拒绝,并将拒绝第一个拒绝消息/错误。
如果您想真正受益于 Promise.all()
方法,您需要向其传递一个承诺数组,而不是您现在传递的字符串数组。
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);
})();
我必须使用 promise.all() 编写 Node.js 脚本来检查环境是否有 docker、git、npm、nvm 和 node.js .对于每个工具,将工具版本写入标准输出。如果某些工具不存在,请写入关于它的 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.all() 没有发挥任何作用,我不熟悉 promise.all() 并且请任何人可以告诉我如何做的例子?
Promise.all()
方法实际上将可迭代的 promise 作为输入(在您的代码中,您只是传递一个字符串数组),returns 一个解析为数组的 Promise传递给函数的输入承诺的结果。当所有传递的承诺都已解决(或者如果传递的 iterable 不包含像您的情况那样的承诺),此返回的承诺将解决。它还将在任何传递的输入承诺拒绝或非承诺抛出错误时立即拒绝,并将拒绝第一个拒绝消息/错误。
如果您想真正受益于 Promise.all()
方法,您需要向其传递一个承诺数组,而不是您现在传递的字符串数组。
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);
})();