我正试图用Mongoose向Mongo提出很多要求。我希望它们是并行和异步的。我不知道我可能要查询多少个,所以我创建了这个辅助函数。尽管我不确定我的评估用法,但它工作正常。问题是eval(return $ {returnStr})给了我SyntaxError。
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} };`);
};
答案 0 :(得分:1)
经验法则:如果您使用的是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;
};
答案 1 :(得分:0)
替换eval(return { ${joinedStr} };
);
return eval(`(async () => {
return { ${joinedStr} }
})();`);
解决了我的问题。