【问题标题】:Return Results Object After Multiple Mongoose Queries多次 Mongoose 查询后返回结果对象
【发布时间】:2017-11-28 08:01:19
【问题描述】:

在 Express 中,我有一个项目数组,每个项目都包含一个存储为 Mongo ObjectIds 的工作会话数组。

我想遍历项目数组,并为每个项目从 MongoDB 获取其工作会话,然后将工作会话列表添加到一个对象,该对象最终将包含项目数组中所有项目的所有工作会话。

projectService.GetWorkSessions(result.user._id)
  .then((projects) => {
    console.log(projects) // nothing gets logged.
  }

GetWorkSessions: (userId) => {
  return getProjects(userId) // this is ok.
    .then((projects) => {
      let workSessions = {};
      let counter = 0;
      return promise = new Promise((resolve, reject) => {
        return projects.forEach((project) => {
          return getWorkSessions(project)
            .then((sessionsList) => {
              counter ++
              workSessions[project._id] = sessionsList;
              if(counter == projects.length) {
                console.log('done')
                promise.resolve();
              }
            })
        })
      })
    })
},

workSession 对象被填充,但是一旦 forEach 完成,我如何将它返回给调用函数?

【问题讨论】:

  • promise = new Promise ... promise.resolve() - 不... 这不是 Promise 的工作方式

标签: javascript express promise


【解决方案1】:

如果您想将一个值数组映射到一个异步检索值数组,请使用Promise.all(values.map(...))

const projectWithSessions = (project) =>
    getWorkSessions(project).then((sessions) => 
        ({ project, sessions })
    );

GetWorkSessions: (userId) => 
    getProjects(userId).then((projects) => 
        Promise.all(projects.map(projectWithSessions))
    );

GetWorkSessions() 的返回值应该解析为一个对象数组,每个对象都有一个 .project.sessions 属性。

【讨论】:

    猜你喜欢
    • 2020-11-25
    • 2021-02-16
    • 1970-01-01
    • 2020-06-18
    • 2021-07-22
    • 2015-12-07
    • 2010-11-13
    • 1970-01-01
    • 2021-05-26
    相关资源
    最近更新 更多