我使用 NodeJS、ExpressJS、MongoDB(使用 Mongoose)编写应用程序...
一切都很完美,但是,当我有一个循环来获取记录并对结果执行某些操作时,如下所示:
for(var i = 0; i < 10; i++) {
recods.findOne({number: i}, function(err,doc){
...
});
}
回调函数范围内的变量“i”是通过引用传递的,结果不是期望的。
当回调被调用时,循环已经运行并且变量已经改变。
如果我尝试将参数作为匿名函数传递,则不起作用,因为它替换了所需的参数:
for(var i = 0; i < 10; i++) {
records.findOne({number: i}, (function(err,doc){
...
})(i));
}
这样,我就失去了“err,doc”参数,
我能做些什么来解决这个大问题?
最佳答案
您可以将其绑定(bind)到回调以创建第一个参数设置为 i
的部分函数:
for (var i = 0; i < 10; i++) {
records.findOne({number: i}, function(i, err, doc) {
...
}.bind(records, i));
}
关于node.js - NodeJS V8 将附加参数传递给回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20316553/