use*_*910 3 javascript node.js
我正在创建一个爬虫来解析我在主文件上有这个功能的游戏(crawler.js)
function kicked() {
try {
info.logged = false;
info.next_login = 0;
info.login_tries = 0;
report('Crawler disconnected from game, reconnecting.');
}
catch (error) {
report('Disconected() error => ' + error);
}
}
Run Code Online (Sandbox Code Playgroud)
我有
module.exports = { kicked: kicked };
Run Code Online (Sandbox Code Playgroud)
在另一个文件(更新会话)我有
var crawler = require('../../crawler');
Run Code Online (Sandbox Code Playgroud)
但当我调用crawler.kicked()我得到未定义,如果我使用console.log(crawler);它显示一个空对象没有任何错误,只是一个空对象,我无法找到为什么该文件没有导出该功能任何帮助?
McM*_*ath 10
问题是你有循环依赖,这是当A需要B时发生的,它需要A等.这些并不总是一个问题.节点可以处理循环依赖.但是,如果没有很好地理解Node模块的解析方式,您可能会遇到问题(通常是空对象问题).
让我们仔细看看这里发生了什么:
crawler.js),它开始执行.crawler.js需要session.js.session.js开始执行其同步操作.请记住,crawler.js尚未完成执行其同步操作.session.js需要crawler.js.但是crawler.js没有什么可以出口(还).它尚未到达文件的底部(它仍然在顶部执行其require调用).所以现在我们可以看到发生了什么.空对象是默认的导出对象.执行此操作时module.exports = {...},将模块的exports属性重新分配给新对象.但module.exports由于上述原因,尚未重新分配.
解决方案是重新考虑您的代码.我建议尝试完全消除循环依赖; 一旦你更好地掌握了它们的工作原理,你可能会不时地使用它们.你的主文件应该没有任何导出.尝试将您的kicked函数放在另一个文件中,并在需要的地方要求.
| 归档时间: |
|
| 查看次数: |
10056 次 |
| 最近记录: |