在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完成,我该如何将它返回到调用函数?
答案 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
属性的对象数组。