多个Mongoose查询后返回结果对象

时间:2017-11-28 08:01:20

标签: javascript express promise

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

我想迭代项目数组,并为每个项目从MongoDB获取其workSessions,然后将workSessions列表添加到一个对象,该对象最终将包含项目数组中所有项目的所有workSessions。 / p>

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完成,我该如何将它返回到调用函数?

1 个答案:

答案 0 :(得分: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属性的对象数组。