嗨我有一个问题,运行一个循环,并获取返回数据使用Promises
。解决不工作在循环Node.js
我有一个getStudentMarks
从主题明智的数据库中获取学生分数的方法。
getStudentMarks: function(studentId, studentStandard) {
console.log("getStudentMarks invoked...");
return new Promise(function(resolve, reject) {
r.table('student_subjects').filter({
"studentId": studentId,
"studentStandard": studentStandard
}).pluck("subjectId", "subjectName").run(connection, function(err, cursor) {
if (err) {
throw err;
reject(err);
} else {
cursor.toArray(function(err, result) {
if (err) {
throw err
} else {
console.log(result.length);
if (result.length > 0) {
studentSubjectArray = result;
var studentMarksSubjectWiseArray = [];
studentSubjectArray.forEach(function(elementPhoto) {
r.table('student_marks').filter({
"studentId": studentId,
"subjectId": studentSubjectArray.subjectId
}).run(connection, function(err, cursor) {
if (err) {
throw err;
reject(err);
} else {
cursor.toArray(function(err, result_marks) {
var studnetMarksDataObject = {
subjectId: studentSubjectArray.subjectId,
subjectName: studentSubjectArray.subjectName,
marks: result.marks
};
studentMarksSubjectWiseArray.push(studnetMarksDataObject);
});
}
});
});
resolve(studentMarksSubjectWiseArray);
}
}
});
}
});
});
}
我被调用的方法,
app.post('/getStudentMarks', function(req, reqs) {
ubm.getStudentMarks(req.body.studentId, req.body.studentStandard)
.then((data) => {
console.log('return data: ' + data);
})
.catch((err) => {
console.log(err);
});
});
当我运行代码的工作精绝没有错误。我获得了studentMarksSubjectWiseArray
阵列中的所有学生标记对象。但问题是,即使在studentSubjectArray
循环完成之前,解决方案正在执行,我得到一个空数组作为返回。我如何解决这个问题。我知道我没有做Promises
的权利。我是Promises
的新手,所以我无法找出正确的方法。
注意,相似的回报,执行你的范围后扔停止:'不会发生reject'。 –
@ L.Meyer我没有得到你。我认为问题出在我的循环上。 –