Javascript 函数范围内的全局变量不工作-async.series
我试图为函数设置一个全局变量,以便在作用域内的所有函数中使用它。使用Javascript 函数范围内的全局变量不工作-async.series,javascript,Javascript,我试图为函数设置一个全局变量,以便在作用域内的所有函数中使用它。使用async.series一个接一个地调用函数: exports.update = function(req, res, next){ var result = {}; // setting global var for the scope var function1 = function(callback) { MyModel.findOne(conditions)
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
在这种情况下,我如何获得财产?谢谢。旧答案
在导出之外声明结果
。更新。在这种情况下必须工作
编辑:如果您想要的话,也可以将result
设置为函数中的空对象
12月17日的新答案
@亚欧会议:如果你还在准备,也许可以定义
result.docs={}
就在result
下面?你的result.docs里面有什么东西吗?听起来像是docs
你在返回的第一个函数是null
。否则,您可能会收到一个错误,说您正在尝试读取未定义的
上的属性。奇怪的是,主函数实际上完成了它的工作,但却出错了。重新启动服务器后,我得到了所需的信息。@Mike C如果我要从function1
中删除记录,在作用域中的下一个函数中,它能变成null
?这可能是原因吗?@ASem如果将其设置为null
,则只能将其设置为null
。如果您仅使用result.docs=docs
分配它,则这意味着docs
必须为null
。如果不在那里,则在其他地方将null
分配给result。这两个函数都可以使用docs
result
。否则,他们将在尝试访问结果时出错,而不是someproperty
。编辑:但是,result
在其他函数中不可用,不能用于从多个函数收集数据。