2017-10-16 16 views
0

スコープ内のすべての関数で関数を使用するために関数のグローバル変数を設定しようとしています。機能はasync.seriesを使って次々と呼ばれています:関数スコープ内のグローバル変数が機能しない - async.series

exports.update = function(req, res, next){ 

    var result = {};  // setting global var for the scope 

    var function1 = function(callback) { 
     MyModel.findOne(conditions) 
     .lean() 
     .exec(function(err, docs) { 
      if (err) { 
      return callback(err, null); 
      } 

      result.docs = docs; // assigning function result to global var 

      return callback(null, 'done'); 
     }); 
    }; 

    var function2 = function(callback) { 
     var fieldsToSet = { 
     // ... 
     somefield: result.docs.someproperty // error here result.docs = null 
     }; 

     Mymodel.create(fieldsToSet, function(err, record) { 
      // ... 
     }); 
    }; 
    }; 

    require('async').series([function1, function2]); 
    }; 

戻り値のエラー:

TypeError: Cannot read property 'someproperty' of null 

この場合には、私はプロパティを取得する方法?ありがとうございました。

+0

result.docsの中に何かがありますか? – sheplu

+1

最初の関数に戻ってきた 'docs'のようなサウンドは' null'です。それ以外の場合は、 'undefined'でプロパティを読み込もうとしているというエラーが発生します。 –

+0

奇妙なこと - 主な機能は実際には動作しますが、エラーが発生します。サーバーを再起動した後、私は必要なものを手に入れます。 – ASem

答えて

-1

旧答え

exports.updateresult外を宣言します。この場合は動作しなければなりません。

EDIT:おそらくを空のオブジェクトの中に入れてください。の場合も同様です。 12月17日

@ASemのよう


新しい答え:あなたがアップし、それのためにまだなら、多分resultresult.docs = {};を定義しますか?

+0

'result'は両方の関数で利用できます。そうでないと、 'someproperty'ではなく' result'にアクセスしようとするとエラーが発生します。編集:しかし、 'result'は他の関数では利用できないでしょう*と*は、複数の関数からデータを集めるために使うことができませんでした。 –

関連する問題