我使用JavaScript来访问API。我有几个文件,目前通过module.exports
链接变量和数据。
问题是当我var variableName = require('./file.js')
时,它会在为变量赋值之前导出变量(但是它被声明了),因此它是未定义的。更难的是我不能在函数中创建变量,因为我需要它是全局变量。如果我可以在函数内声明它,它必须等到它被声明能够访问它,因此它将具有指定的值。
围绕它的方式......到目前为止,我所拥有的只有两个想法是合理的。
首先,将module.exports.variableName
放在函数中,但是当我尝试从其他文件中检查其值时,该游戏实际上没有数据(当我console.log(variableName)
时只是空白)。
另一个有效的想法是做以下
setTimeout(function(){
module.exports.variableName = variableName;
}, 3000);
换句话说,我实际上在调用API之后,在文件底部的最后一段代码中等待,直到它可以导出变量为止。
这令人惊讶地在我的文件中起作用,但我希望有更好的替代方案...因为如果API需要更多的响应,那么变量是未定义的,或者如果互联网很慢,等等。我也想要它在调用API之后更新haha,而不是在调用API之后更新,然后是3秒或等等。
任何反馈都有帮助!谢谢!我是新的(ish)JavaScript,所以如果你认为你的答案比一般乔理解的要复杂得多,请解释一下。 (如果不是我可以搞清楚)。
再次感谢!
编辑:
如果有帮助我通过我的OSX终端运行node
这里有一些文件信息:
//file.js
var balance;
request.post(options, function(error, response, body) {
//API call
var parsed = JSON.parse(body);
balance = parsed.currency;
console.log(balance) //defined
});
console.log(balance); //undefined
module.exports.balance = balance;
//other file
var balance = require('./file.js')
var bal = balance;
console.log(bal); //undefined
我注意到的是,首先执行API函数外部的console.log
,然后执行其中的API,因此您将获得未定义的输出和定义的输出(按此顺序)。对于需要的“其他文件”,它首先从 file.js ,然后是自己的未定义的console.log { balance: undefined }
,然后是最终控制台,给出未定义的console.log。记录定义值的 file.js 。