module.exports输出太快了

时间:2017-11-08 07:49:27

标签: javascript node.js module export

我使用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

0 个答案:

没有答案