为啥当我使用“require”时我的变量未定义? [复制]
Posted
技术标签:
【中文标题】为啥当我使用“require”时我的变量未定义? [复制]【英文标题】:Why is my variable undefined when I use "require"? [duplicate]为什么当我使用“require”时我的变量未定义? [复制] 【发布时间】:2020-11-06 15:47:51 【问题描述】:我这里有一个简单的函数来获取 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
的回调还没有运行。
【参考方案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));
你也可以看看构造一个函数来返回一个承诺,在链接的问题中有很多关于它的信息。
【讨论】:
以上是关于为啥当我使用“require”时我的变量未定义? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
为啥在将 next.js 与环境变量一起使用时我的 API 密钥可见?