我是node js / express中的新手,我试图查询来自sqlite3数据库的数组中的foreach id。我的for循环如下所示
response.patients = results;
for (var i = 0; i < results.length; i++) {
response.patients[i].check = "false";
var patient = response.patients[i];
db.each("SELECT visit_id FROM patient_visits where patient_id='"+patient.id+"' AND visitdate >='"+moment().format('YYYY-MM-DD')+"'", function(err, row) {
if (row) {
response.patients[i].check = "true";
}
});
}
res.send(response);
问题在于for循环在查询完成之前会继续。有没有一种方法可以检查查询是否已完成? 我只需要设置一个标志true / false。
答案 0 :(得分:0)
问题在于db.each是一个回调函数。该函数将执行,并且响应需要花费一些时间来检索,但是系统不会停止并且for循环会继续。当它结束时,在仍在处理来自db.each的响应时,将调用res.send。
您可以尝试
db.all(
SELECT visit_id FROM patient_visits where patient_id IN ?
AND visitdate >='"+moment().format('YYYY-MM-DD')+"'", response.patients,
function(err, rows) {
if (err) {
throw err;
}
rows.forEach((row) => {
response.patients[row.visit_id].check = "true";
});
res.send(response);
});
我不确定要获取visit_id的行变量的内容,但是在打印变量并检查其是否有效之前。
如果您有任何疑问,请告诉我。而且我强烈建议您阅读一些有关回调及其工作原理的内容,然后再承诺和async / await,因为现在不使用回调,而使用async await,您的问题将很容易得到解决。