javascript - 并行异步 Mongoose 查询 || eval(返回) 语法错误 : Illegal return statement

标签 javascript mongodb mongoose

我正在尝试使用 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/

相关文章:

javascript - 如何在React Native中显示动态图像?

javascript - 从 javascript 文件加载 css 时,我应该如何在加载 css 文件之前隐藏 html 输出?

javascript - 如何在我的文件中使用 MVC5 中的 Fullcalendar

javascript - WebStorm 中的代码补全就像 ReSharper for Visual Studio 一样

javascript - 使用 JavaScript 访问 MongoDB 的常用方法是什么?

node.js - 在一个变量上运行的 Node JS 中使用正则表达式的 Mongo 查询

node.js - Mongoose,更有效的数组搜索方式?

mysql - Mongo 将完整的数据库保存在 ram 中是真的吗?

node.js - 将 createBy 字段添加到 keystone.js 中的 User 模型中

javascript - 如何根据mongodb中的日期范围过滤数据