【发布时间】:2017-12-27 05:52:49
【问题描述】:
让我们考虑保存各种类型分数的字典,例如 {a:0,b:0,c:0} 我有 3 个 mongo db A、B 和 C 的集合。 表演,
A.find({<key>:<value>})
.then(res=>{
//gets an array of the response <RES1>
})
现在对于数组中的每个元素,我都在这样做
B.find({_id : <RES1[i].some_id>})
.then(res=>{
//again a new array of responses <RES2>
})
最后,我得到了需要在集合 C 中更新分数的类型,然后我再次在循环中查询,例如
C.find({_id : RES2[i].some_key})....
我不知道我错在哪里!!!下面嵌入代码
getScoreForEachTypes() {
User.find({ company: req.params.company })
.then(users => {
var responsesOfAllUsersArr = [];
usersForThisCompany = users;
users.forEach(user => {
responsesOfAllUsersArr.push(Response.find({ email: user.email }));
});
return Promise.all(responsesOfAllUsersArr);
})
.then(responsesOfAllUsersArr => {
var data = { _E: 0, _M: 0, _A: 0, _Q: 0, _E: 0 };
responsesOfAllUsersArr.forEach(el => {
el.forEach(_el => {
var j = getQuestionType(_el.questionId);
data[j] += _el.responseChoice;
})
})
});
}
function getQuestionType(qid) {
return Question.findOne({ _id: qid })
.then(el => {
return el.quesType;
})
.catch(err => {
console.log("err while fetching type of question", err);
});
}
【问题讨论】:
-
你如何使用
getScoreForEachTypes()?该函数没有返回值。 -
是的,这就是我卡住的地方,我需要它的返回值才能进一步使用..我需要返回更新的数据,类似于 { _E: 1, _M: 4, _A: 6 , _Q: 3, _E: 0 }
-
如果你在
User.find之前写return怎么办? (函数内的第一行) -
@Zyigh 它将返回一个处于待处理状态的承诺,在日志中类似于
Promise { <pending> } -
是的,对不起,我一点都不清楚......如果你返回 Promise (
User.find) 但在函数调用后写.then()怎么办?
标签: javascript arrays node.js mongodb mongoose