2017-10-16 54 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

老答案

申報resultexports.update。必須在這種情況下工作。

編輯:可能使result等於一個空對象裏面的函數以及,如果這就是你想要的。


新的答案,因爲12月17日

@ASem的:如果你還在爲它,也許定義result.docs = {};result下?

+0

'結果'在兩個函數中都可用。否則,他們會嘗試訪問'result'而不是'someproperty'。編輯:但是'result'在其他函數中不可用*和*不能用於從多個函數中收集數據。 –