nodejs for具有mysql insert的循环未按预期运行

smdnsysy  于 2021-06-24  发布在  Mysql
关注(0)|答案(3)|浏览(277)

当我尝试插入一些数据并使用“for循环”处理结果时,迭代只在上一个循环中完成。

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

但是我需要在每个insert查询之后做一些处理。在这种情况下是不可能的。请提出一些解决方案!

q7solyqu

q7solyqu1#

问题解决了!:)刚刚将循环变量类型替换为“let”

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

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

c3frrgcw2#

您可以使用async.eachasync 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);
  })
});
pvabu6sv

pvabu6sv3#

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);
                    });

                });
            }
        });
    });
},

相关问题