我有以下循环:
params = ['Thing', 'AnotherThing', 'AnotherThingAgain'];
for (i in params){
MyModel.find(....).exec(function(err, data){
// do some stuff here
});
}
因此,当我的请求执行时,我想在回调函数中使用params[i]
。问题是请求似乎是异步执行的,因此params[i]
总是取我的数组的最后一个值('AnotherThingAgain'
)。
如何将额外参数传递给该回调函数,以便在函数中使用它?
答案 0 :(得分:3)
最简单的方法是使用闭包:
const params = ['Thing', 'AnotherThing', 'AnotherThingAgain'];
params.forEach((param, i) => {
MyModel.find(....)
.exec((err, data) => {
// do some stuff here with param or i
});
});
承诺示例:
// Some function to run on param
function searchParam(param) {
return MyModel.find({
param: {$eq: param},
})
.then((result) => {
// For eaxmple combine result with param...
return {
peram,
result,
};
});
}
const params = ['Thing', 'AnotherThing', 'AnotherThingAgain'];
Promise.all(params.map(searchParam))
.then((items) => {
// items is array of param, result pairs
items.forEach(({param, result}) => {
console.log(param, '=>', result);
});
});