Node.js Mongoose:尝试在回调中创建一个文档,在外部循环中使用值
我最近在猫鼬身上偶然发现了一个问题,下面是我的代码:Node.js Mongoose:尝试在回调中创建一个文档,在外部循环中使用值,node.js,mongoose,Node.js,Mongoose,我最近在猫鼬身上偶然发现了一个问题,下面是我的代码: var v, query; for(var i=0; i<values.length; i++) { v = values[i]; query = model.findOne({type:v}); query.exec(function(err, doc) { if(doc == undefined) { var m = new model({type:v, count:0});
var v, query;
for(var i=0; i<values.length; i++) {
v = values[i];
query = model.findOne({type:v});
query.exec(function(err, doc) {
if(doc == undefined) {
var m = new model({type:v, count:0});
// but the 'v' above is not the values[i] in the for loop
// code to save comes here
} else {
doc.count++;
// update code comes here
}
});
}
var v,查询;
对于(var i=0;i请尝试以下方法:
values.forEach(function(v) {
var query = model.findOne({type:v});
query.exec(function(err, doc) {
if(doc == undefined) {
var m = new model({type:v, count:0});
// but the 'v' above is not the values[i] in the for loop
// code to save comes here
} else {
doc.count++;
// update code comes here
}
});
});
它不能与for
循环一起工作的原因是Javascript没有块作用域,这意味着块中引用的v
变量被重用而不是重新创建
当您立即使用变量时(如使用model.findOne({type:v})
这不是问题,但由于query.exec
的回调函数(可能)将在循环完成后执行,因此回调中的v
变量将只包含循环中的v
的最后一个值
通过使用forEach
,您每次都会创建一个新的v
变量