Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongoose:尝试在回调中创建一个文档,在外部循环中使用值_Node.js_Mongoose - Fatal编程技术网

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
变量