Node Express js Запрос внутри цикла - PullRequest
0 голосов
/ 29 декабря 2018

Я новичок в узле js / express. Я пытаюсь запросить, foreach id в массиве, некоторые данные из базы данных sqlite3.Мой цикл 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 голосов
/ 29 декабря 2018

Проблема в том, что db.each является функцией обратного вызова.Эта функция выполняется, и для получения ответа требуется некоторое время, однако система не останавливается и цикл for продолжается.Когда это заканчивается, вызывается res.send, пока ответы от db.each все еще обрабатываются.

Вы можете попробовать

 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 ваша проблема будет легко решена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...