こんにちは私はループを実行し、Promises
を使用して返信データを取得する問題があります。ループNode.jsで解決されない解決
私はgetStudentMarks
の題名でデータベースから生徒マークを得る方法を持っています。
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);
});
});
私は、コードを実行し、私は方法を呼び出すだ
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);
}
}
});
}
});
});
}
、そのエラーがない絶対に細かい作業。私はstudentMarksSubjectWiseArray
配列内のすべての学生マークオブジェクトを取得します。しかし、問題は、studentSubjectArray
ループが完了する前でさえ、解決が実行されており、空の配列が返されています。どのように問題を解決するのですか?私はPromises
の権利をしていないことを理解しています。私はPromises
に新しいので、正しい方法を理解することができません。
注意、あなたのスコープ内で実行が投げた後に停止される: 'reject'は発生しません。 –
@ L.Meyer私はあなたを得なかった。問題は私のループだと思う。 –