안녕하세요, 루프를 실행하고 반환 데이터를 얻는 데 문제가 있습니다 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
에 익숙하지 않기 때문에 올바른 방법을 찾아 내지 못했습니다.
반환과 마찬가지로 throw가 발생하면 범위에서 실행이 중지됩니다. '거부'가 발생하지 않습니다. –
@ L.Meyer 나는 당신을 얻지 못했습니다. 내 문제는 내 루프와 함께 생각합니다. –