首页 > 解决方案 > 为什么当我使用“require”时我的变量未定义?

问题描述

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

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

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

标签: node.jsexpressrequire

解决方案


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

解决此问题的一种快速简单的方法是使用promisifyutil 进行包装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));

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


推荐阅读