每次我的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回电不起作用,但是当我做一个非常基本的例子时呢?
任何帮助都会非常感激,因为我觉得我在这里错过了一个技巧!
答案 0 :(得分:0)
正如@Cruiser所说,问题在于关闭。 Dimensions.get('window').width
可能是异步操作,因此当实际调用store.find
时,上下文(或本例中callback
的值)可能已经更改。
现在您可以测试代码:
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++){
functionOne(()=>{
console.log(i);
})
}
而且,你得到了这个:
这是功能一(重复10次)
0
1
...
8
9