我有四个JavaScript文件如下:
API.js
var controller = require('./Controller');
var apifunction = new function(){
controller.a(function(result) {
console.log("result: " + result)
})}
Controller.js
var bll = require('./BLL.js');
module.exports =
{
a: function(callback){
bll.b(function(result){
callback(result);
})
}
c: function(callback){
callback(result);
}
}
}
BLL.js
var controller = require('./Controller.js');
module.export =
{
b: function(callback){
controller.c(function(result){
callback(result);
})
}
}
所以API函数调用控制器中的一个函数,再次调用 BLL 中的 b函数。
在 BLL 中,它再次调用控制器中的 c函数,但后来我得到错误:controller.c不是函数
有什么想法吗?
答案 0 :(得分:0)
Controller.js和BLL.js彼此“需要”,这就是问题所在,人们会得到一个空模块(占位符)。
您可以重构它,删除双向“require”,例如将一个模块作为参数传递给另一个。
答案 1 :(得分:0)
考虑将函数controller.c分离成单独的文件...例如。 commonC.js
CommonC.js
module.exports =
{
c: function(callback){
callback(result);
}
}
}
Controller.js
var bll = require('./BLL.js');
module.exports =
{
a: function(callback){
bll.b(function(result){
callback(result);
})
}
}
BLL.js
var controller = require('./Controller.js');
var commonC = require('./CommonC.js');
module.export =
{
b: function(callback){
commonC.c(function(result){
callback(result);
})
}
}
或者,如果重构不是一个选项(你应该重构),你可以将require放在函数中,以便在调用函数时执行。
Controller.js
module.exports =
{
a: function(callback){
var bll = require('./BLL.js');
bll.b(function(result){
callback(result);
})
}
c: function(callback){
callback(result);
}
}
}