2017-10-16 55 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'在其他函数中不可用*和*不能用于从多个函数中收集数据。 –