循环内的Node Express js查询

时间:2018-12-29 06:06:39

标签: node.js express

我是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。

1 个答案:

答案 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,您的问题将很容易得到解决。