我遇到一个奇怪的问题。
xxx.testFunction();
语句在执行时出错:TypeError: Cannot read property 'testFunction' of undefined
,但在先决条件为if(xxx)
的情况下有效。.
问题可以在以下设置中重新创建
index.js
const { Module1 } = require("./Module1"); //Commenting out this line fixes the issue
const { Module3 } = require("./Module3");
Module3.testFunction();
Module1.js
const { Module2 } = require("./Module2");
class Module1 {
static testFunction() {
console.log("testFunction")
}
}
module.exports = { Module1 };
Module2.js
const { Module3 } = require("./Module3"); //Commenting out this line also fixes the issue
class Module2 {
}
module.exports = { Module2 };
Module3.js
const { Module1 } = require("./Module1");
class Module3 {
static testFunction() {
//if(Module1) //If we merely check this first it works, but directly it doesn't
Module1.testFunction();
}
}
module.exports = { Module3 };
此外,如果删除了某些require
语句,该函数将被执行。
当更改index.js中的 require
的顺序时,它也得到修复。
如果您想知道为什么多余的require
,则原因是模块中的其他代码需要它们。.上面的代码是生产代码的精简版,我们在其中发现了问题
据我了解,nodejs模块中的变量的作用域仅限于该模块,对其他模块不会有任何影响。
有人可以解释这种行为吗?
答案 0 :(得分:0)
您似乎具有循环依赖项。要解决该问题,您可以在函数本身中要求,就像让Module3.js看起来像这样:
SELECT REGEXP_EXTRACT(hora,'\d\d') AS subhoras FROM axmugbcn18.bbdd WHERE hora = '2017-06-05 09:09:32.0'