Nodejs для цикла с MySQL вставкой не работает должным образом - PullRequest
0 голосов
/ 26 июня 2018

Когда я пытаюсь вставить некоторые данные и обработать результат, используя «for Loop», итерация завершается только в последнем цикле.

const sql4 = "insert into core_crm_job_task set ?";

for(var m = 0; req.body.jobTasks.length > m; m++){

 console.log('a'+m);

 let jobTask = {
  ID_JOB_REGISTRY : registryId,
  ID_TASK_CODE : jobCode+' '+req.body.jobTasks[m].task_code_suffix,
  TASK_TYPE : req.body.jobTasks[m].task_type,
  TASK_QTY : req.body.jobTasks[m].task_qty,
  TASK_INSTRUMENT : req.body.jobTasks[m].task_instrument,
  TASK_INSTRUMENT_ID : req.body.jobTasks[m].task_instrument_id,
  REMARK : req.body.jobTasks[m].task_remark,
  IS_ACTIVE: 1,
  CREATED_BY: 1,
  CREATED_DATE: getCurrentTime()
};

connection.query(sql4,jobTask, (err, result) => {
 if (err){
  console.log('b'+m);
  connection.release();
 }
 else{
  console.log('c'+m);
  //some process here
 }
})
}

Ниже показан пример вывода, когда я использовал массив из 3 элементов. Лог с буквой 'c' печатается только в последнем элементе. Другие элементы не завершили итерацию.

a0
a1
a2
c2

Но мне нужно выполнить какой-то процесс после каждого запроса на вставку. В этом случае это невозможно. Пожалуйста, предложите какое-нибудь решение!

Ответы [ 3 ]

0 голосов
/ 26 июня 2018

Проблема решена!:) Просто заменил для типа переменной цикла "let"

for(var m = 0; req.body.jobTasks.length > m; m++)

на

for(let m = 0; req.body.jobTasks.length > m; m++)
0 голосов
/ 26 июня 2018

Вы можете использовать async.each Async Ref

Так что он будет выполняться один за другим, вы получите ожидаемый результат

const sql4 = "insert into core_crm_job_task set ?";
async.each(req.body.jobTasks,function(obj,callback){
  let jobTask = {
  ID_JOB_REGISTRY : registryId,
  ID_TASK_CODE : jobCode+' '+obj.task_code_suffix,
   TASK_TYPE : obj.task_type,
  };
  connection.query(sql4,jobTask, (err, result) => {
    if (err){
      callback(err);
    }
    callback(null);
  })
});
0 голосов
/ 26 июня 2018

addEmojies: функция (запрос, обратный вызов) {

    //getting the inputs
    var questions = request.body.question;

    //if questions contains only one
    if (!Array.isArray(questions)) {

        questions = que = [request.body.question];
    }

    const mysqlConnection = mysqlPool(function (err, connection) {

        connection.beginTransaction(function (err) {

            if (err) {

                connection.release();
                if (err) { throw err; }
            }

            //loop trough the questions
            for (var q = 0; q < questions.length; q++) {

                //setting up data object for update category
                var mainQuestionValues = {

                    CAMPAIGN_ID: questions[q].campaign_id,
                    MAIN_QUESTION_TITLE: questions[q].question,
                    CREATED_BY: session.userdata.user_id,
                    HAS_SUB_QUESTIONS:0,
                    IS_ACTIVE: 1
                };

                const sql = 'INSERT INTO main_question SET ?';

                connection.query(sql, mainQuestionValues, function (err, result) {

                    if (err) {

                        if (err) { throw err; }
                        connection.release();
                        connection.rollback(function () {
                            return callback(false);
                        });
                    }

                    connection.commit(function (err) {
                        if (err) {
                            connection.release();
                            logger.error(err);
                            connection.rollback(function () {
                                return callback(false);
                            });
                        }
                        connection.release();
                        return callback(true);
                    });

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