调用一个静态函数返回'不是一个函数'

我正在研究一个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) { } } 

但是,如果我把要求的静态function,它工作正常。 为什么是这样? 我想只需要在顶部声明'var SomeItem',而不是在每个我需要使用它的函数中。

为什么在一个函数中放入require需要改变行为的唯一原因是你所需要的模块使用了一些在require模块被启动的时候不可用的资源,但是在第一次使用这个函数时可用。

这不应该发生,但这可能是这里发生的事情 – 一个竞争条件。 在没有看到代码的情况下,不可能再告诉你什么,但你一定要仔细看看所需的模块,寻找竞争条件和时间敏感的状态。

更多的错误logging可以帮助缩小问题的范围。