node.js - 调用静态函数返回 'Is not a function'

标签 node.js meanjs

我正在开发一个 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/

相关文章:

javascript - 弃用警告 : Calling an asynchronous function without callback is deprecated

javascript - 如何在 Sails.js 0.11 中添加自定义 CSS 和 JS 文件?

meanjs - Mean.JS 并添加外部依赖项

node.js - 从 Node.js 到 Python 3.6 的 hmac 512 迁移结果不匹配

node.js - 带有 Node js的facebook messenger bot api发送多个回复

javascript - 在 Ubuntu 上查找 Node JS 实例

javascript - Meanjs 禁止错误

docker - 我的docker-compose从另一个文件夹中拾取文件,而不是从我运行命令的位置

javascript - .replace 在 js 中不起作用

javascript - Grunt Uglify - 如何创建用于调试的源映射?