我正在开发一个 mean.js 堆栈应用程序。当我尝试调用我的一个模型的静态函数时,出现错误“SomeItem.createNew 不是函数”
我正在从不同架构的另一个静态方法调用此静态方法,就像这样。
不起作用:
var SomeItem = require('./some-item.js');
aSchema.statics.createNew = function(body, cb) {
var newA = new this();
//create child items
for (i = 0; i < body.someItems.length; i++ {
SomeItem.createNew(body.someItems[i], function(err, item) {
}
}
有效:
aSchema.statics.createNew = function(body, cb) {
var newA = new this();
var SomeItem = require('./some-item.js');
//create child items
for (i = 0; i < body.someItems.length; i++ {
SomeItem.createNew(body.someItems[i], function(err, item) {
}
}
但是,如果我将 require 放在静态函数中,它就可以正常工作。为什么是这样?我只想在顶部声明一次“var SomeItem”,而不是在我需要使用它的每个函数中。
最佳答案
将 require 放在函数内部会改变行为的唯一原因是你需要的模块使用了一些资源,这些资源在需要的模块启动时不可用,但在第一次使用时可用那个函数。
这不应该发生,但这可能就是这里发生的事情——竞争条件。如果没有看到有问题的代码就不可能告诉您更多信息,但您肯定需要仔细查看所需的模块以查找竞争条件和时间敏感状态。
更多错误记录有助于缩小问题范围。
关于node.js - 调用静态函数返回 'Is not a function',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42956129/