使用MySQL插入的Nodejs for循环无法正常运行

时间:2018-06-26 06:48:21

标签: mysql node.js asynchronous

当我尝试插入一些数据并使用“ 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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:-1)

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

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