Узел js mysql вызов хранимой процедуры в цикле for

0

Итак, в настоящее время я использую пакет mysql npm https://www.npmjs.com/package/mysql. У меня есть требование, когда мне придется многократно вызывать хранимую процедуру с оговоркой, что последующие вызовы хранимых процедур зависят от предыдущего вызова. Псевдокод будет выглядеть следующим образом:

let mysql = require("mysql");

let mysqlPoolConnection = mysql.createPool({
      connectionLimit: 20,
      host: '0.0.0.0',
      port: '3306',
      user: 'user1',
      password: 'pwd',
      database: 'mysql_db'
});


for (let index = 0; index < params.length; index++) {
    let sp_ProcedureCall = "CALL sp_StoredProcedure(?, ?, ?, ?)";
    let sp_ProcedureParams = [params[index].firstParam, params[index].secondParam, params[index].thirdParam, params[index].fourthParam];
    // This is where the issue is. I'd like to call the stored procedure once and then once I get a response from it then make subsequent calls. Basically, depending on the previous stored procedure result, I decide whether I continue with subsequent calls or not.
    mysqlPoolConnection.query(sp_ProcedureCall, sp_ProcedureParams, (errorObj, responseObj, fieldsObj) => {

     }
}
Теги:
stored-procedures
bulk

1 ответ

0
Лучший ответ

NodeJS является асинхронным, то есть ваш for-loop итерации, не дожидаясь результата вызова. Вам нужно контролировать поток вашей программы, если вы хотите "подождать" для предыдущих результатов.

Посмотрите на библиотеку, такую как async, чтобы включить этот тип потока управления. Из вашего описания everySeries() может быть хорошим вариантом - запускать функцию для каждого значения в массиве и запускать только по одному. (Или уменьшите, в зависимости от того, что вам нужно - есть и другие варианты)

  • 0
    Позвольте мне попробовать async и eachSeries и дать вам всем знать, как это происходит. Причина заключается в том, что хранимая процедура имеет транзакции, выполнение которых займет некоторое время, и ее устаревшая хранимая процедура, следовательно, не может сильно ее изменить. Вот почему я хочу выполнить его по одному и решить, хочу ли я продолжить со следующим вызовом или нет, если есть фатальная ошибка.
  • 0
    Я собираюсь принять ответ глины, потому что это помогло мне решить эту проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню