mongoose如何在exec回调函数中传递额外的参数

时间:2016-06-17 14:01:34

标签: javascript node.js mongoose callback

我有以下循环:

params = ['Thing', 'AnotherThing', 'AnotherThingAgain'];
for (i in params){
    MyModel.find(....).exec(function(err, data){
     // do some stuff here
   });
}

因此,当我的请求执行时,我想在回调函数中使用params[i]。问题是请求似乎是异步执行的,因此params[i]总是取我的数组的最后一个值('AnotherThingAgain')。

如何将额外参数传递给该回调函数,以便在函数中使用它?

1 个答案:

答案 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);
    });
});