循环中的Mongoose回调函数

时间:2017-09-05 20:59:21

标签: javascript node.js mongodb asynchronous mongoose

每次我的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 :(得分: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