我正在尝试使用 Mongoose 向 Mongo 发出很多请求。我希望它们是并行和异步的。我不知道可能需要查询多少个,因此我创建了这个辅助函数。它工作得很好,尽管我不确定我的 eval 用法。问题是 eval(return${returnStr}) 给了我语法错误。
const batchRetrieve = async (query, models) => {
models.forEach((model, i) => {
eval(`task${i} = ${model}.findOne(query)`);
});
let str = [];
for (let i = 0; i < models.length; i++) {
str.push(`res${i}: await task${i}`);
}
const joinedStr = Array.prototype.join.call(str, ', '); //output is 'res0: await task0, res1: await task1'
// return { res0: await task0, res1: await task1 }; works fine
eval(`return { ${joinedStr} };`);
};
最佳答案
经验法则:如果您使用eval
,那么您就做错了。试试这个:
const batchRetrieve = async (query, models) => {
const promises = [];
models.forEach(model => {
promises.push(model.findOne(query));
});
const results = [];
for (let i = 0; i < models.length; i++) {
results.push(await promises[i]);
}
return results;
};
关于javascript - 并行异步 Mongoose 查询 || eval(返回) 语法错误 : Illegal return statement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58365160/