嗨我有一個問題,運行一個循環,並獲取返回數據使用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我沒有得到你。我認爲問題出在我的循環上。 –