每次我的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 回答
正如@Cruiser所说,问题在于关闭 .
store.find
可能是异步操作,因此当实际调用callback
时,上下文(或者,在这种情况下为i
的值)可能已经更改 .现在你可以测试代码了:
输出将是这样的:
但是,如果将其包装在闭包中:
而且,你得到这个: