【问题标题】:Verify environment using promise.all() [closed]使用 promise.all() 验证环境 [关闭]
【发布时间】:2022-01-11 14:07:22
【问题描述】:

我必须使用 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.all(fileVersion); 零意义
  • 示例:Promise.all([getVersion(fileVersion[0]])Promise.all(fileVersion.map(getVersion))

标签: javascript node.js async-await es6-promise promise.all


【解决方案1】:

Promise.all() 方法实际上将一个可迭代的 Promise 作为输入(在您的代码中,您只是传递一个字符串数组),并返回一个 Promise,该 Promise 解析为传递给的输入 Promise 的结果数组功能。当所有传递的 Promise 都已解决(或者如果传递的迭代不包含与您的情况类似的 Promise),此返回的 Promise 将解决。它也会在任何传递的输入 promise 被拒绝或 non-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);
})();

【讨论】:

  • 是的,但你能告诉我一个如何向它传递一组承诺的例子吗?
  • 我更新了对您要求的答案@MamukaBzhalava
  • 非常感谢
  • 不客气,如果你能接受这个答案,我将不胜感激。
  • 是的,谢谢你
猜你喜欢
  • 1970-01-01
  • 2020-08-09
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
相关资源
最近更新 更多