【问题标题】:Why is my variable undefined when I use "require"? [duplicate]为什么当我使用“require”时我的变量未定义? [复制]
【发布时间】:2023-03-13 01:47:02
【问题描述】:

我这里有一个简单的函数来获取 git ID(仅用于测试目的)。从上到下评估变量时,我不明白如何设置变量。它给了我未定义。

var gitID;
require ('child_process').exec ('git rev-parse HEAD', function (err, stdout) {
  gitID = stdout;
});
console.log (gitID);

如何将我的 js 文件顶部的变量设置为 git ID?

【问题讨论】:

  • 问题不是require。这是一个带有回调的异步操作,因此gitID = stdout 行比console.log(gitID) 行运行得晚得多。所以在你做console.log(gitID)的时候,它仍然是未定义的,因为git进程还没有完成,所以你的带有gitID = stdout的回调还没有运行。

标签: node.js express require


【解决方案1】:

如前所述,这是因为您正在进行的调用是使用回调的异步调用,并且console.log(gitID)exec 操作能够完成并返回输出之前完成,因此它是@987654323 @。

解决此问题的一种快速简单的方法是使用promisify util 将exec 包装在:

import { exec } from "child_process";
import { promisify } from "util";

const promisifiedExec = promisify(exec);

promisifiedExec("git rev-parse HEAD").then(res => console.log(res.stdout));

你也可以看看构造一个函数来返回一个承诺,在链接的问题中有很多关于它的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    相关资源
    最近更新 更多