首页 文章

循环中的Mongoose回调函数

提问于
浏览
0

每次我的for循环迭代时,我都试图运行一个Mongoose回调函数 .

我的代码如下所示:

for(var i =0; i<10; i++){
store.find({},()=>{
console.log(i);
    })
}

然而,当这个被运行时,我看到数字10,打印10次而不是我所期望的,这是通过.find方法内部回调打印的从1到10的计数 .

令我困惑的是,如果我运行此代码:

var functionOne = (callback)=>{
 console.log("this is function one")
  callback();
  }


 for (var i = 0; i<10; i++){
 functionOne(()=>{
   console.log(i);
  })
}

我得到了预期的结果,即“这是函数1”被打印10次,然后执行从1到10的计数 .

有人可以说明为什么我的Mongoose回叫不起作用,但是当我做一个非常基本的例子时呢?

任何帮助都会非常感激,因为我觉得我在这里错过了一招!

1 回答

  • 0

    正如@Cruiser所说,问题在于关闭 . store.find 可能是异步操作,因此当实际调用 callback 时,上下文(或者,在这种情况下为 i 的值)可能已经更改 .

    现在你可以测试代码了:

    var functionOne = (callback)=>{
     console.log("this is function one")
      setTimeout(callback, 50); // delay by 50ms
      }
    
    
     for (var i = 0; i<10; i++){
     functionOne(()=>{
       console.log(i);
      })
    }
    

    输出将是这样的:

    这是功能一(重复10次)10次(重复10次)

    但是,如果将其包装在闭包中:

    var functionOne = (callback)=>{
      console.log("this is function one")
      setTimeout(callback, 50); // delay by 50ms
    };
    
    for (var i = 0; i<10; i++) {
      (function (index) {
        functionOne(() => console.log(index));
      })(i);
    };
    

    而且,你得到这个:

    这是功能一(重复10次)0 1 ... 8 9

相关问题