Есть ли способ проверить, завершился ли запрос?
Вы можете использовать Promise.all()
, чтобы узнать, были ли выполнены все асинхронные вызовы или нет.
'use strict';
function fetchPatients(where, limit, offset) {
let qry = "SELECT patients.*, patient_visits.visit_id,patient_visits.patient_id, patient_visits.visitdate, patient_visits.visittime FROM patients LEFT JOIN patient_visits ON patients.id = patient_visits.patient_id " + where + " GROUP BY patients.id ORDER BY patients.id DESC LIMIT " + limit + " OFFSET " + offset;
return new Promise((resolve, reject) => {
db.all(qry, (err, patients) => {
if (err) {
return reject(err);
}
resolve(patients);
});
});
}
function queryVisitsByPatientId(patient) {
return new Promise((resolve, reject) => {
patient.check = "false";
db.each("SELECT visit_id FROM patient_visits where patient_id='" + patient.id + "' AND visitdate >='" + moment().format('YYYY-MM-DD') + "'", function (err, row) {
if (err) {
return reject(`Failed for ${patient.id}`);
}
if (row) {
patient.check = "true";
}
return resolve(patient);
});
});
}
fetchPatients(where, limit, offset).then(patients => {
let allPatients = patients.map(patient => {
return queryVisitsByPatientId(patient);
});
return Promise.all(allPatients);
}).then(patientDetails => {
return res.send({
patients: patientDetails
});
}).catch(err => {
return res.send({
error: err
});
});