Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在多个Mongoose查询后返回Results对象_Javascript_Express_Promise - Fatal编程技术网

Javascript 在多个Mongoose查询后返回Results对象

Javascript 在多个Mongoose查询后返回Results对象,javascript,express,promise,Javascript,Express,Promise,在Express中,我有一个项目数组,每个项目都包含一个存储为Mongo ObjectId的工作会话数组 我希望迭代项目数组,对于每个项目,从MongoDB获取其工作会话,然后将工作会话列表添加到一个对象,该对象最终将包含项目数组中所有项目的所有工作会话 projectService.GetWorkSessions(result.user._id) .then((projects) => { console.log(projects) // nothing gets logge

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

我希望迭代项目数组,对于每个项目,从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.allvalues.map…:

GetWorksSessions的返回值应解析为一个对象数组,每个对象都具有.project和.sessions属性。

promise=newpromise。。。承诺.决心-不。。。这不是承诺的工作方式
const projectWithSessions = (project) =>
    getWorkSessions(project).then((sessions) => 
        ({ project, sessions })
    );

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