2017-03-22 16 views
3

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) { 
    } 
} 

を、私はそれが正常に動作し、静的な関数の内部で必要に配置する場合。どうしてこれなの?私はそれを使用する必要があるすべての関数ではなく、一番上に一度だけ 'var SomeItem'を宣言する必要があります。

答えて

0

機能の中にrequireを配置するのは、必要なモジュールが、必要なモジュールが起動された瞬間に利用できないが、最初の使用の瞬間に利用可能なリソースその機能の

これは起こらないはずですが、これはおそらくここで起こっていることです - 競合状態です。問題のコードを見ずに何かを教えてもらうのは不可能ですが、レースの状態や時間に敏感な状態を探しているモジュールを詳しく調べる必要があります。

その他のエラーログは、問題の絞り込みに役立ちます。

+0

何らかの理由で、私のapp.jsファイルのrequireモジュールの順序を変更して、aSchemaのファイルが最初に呼び出されたときに問題が解消されました。私のapp.jsファイルは、someItemのファイルを呼び出したaSchemaのファイルを呼び出したmy apiファイルを呼び出しました。これで私の問題が解決された理由はもう分かりませんか? – Sean

関連する問題