У меня есть массив конфигурации, который содержит объекты.На основе свойств в этих объектах строится запрос для каждой строки в массиве.Таким образом, количество выполняемых запросов не является установленным числом.
Данные этих запросов затем необходимо вставить в другую таблицу.Я написал некоторый код, который выполняет это действие, но у меня есть некоторые проблемы с асинхронным поведением NodeJS.Поскольку вызовы MySQL выполняются асинхронно, процесс NodeJS не завершается правильно.Если я сам закрою процесс в конце скрипта, не все вызовы MySQL будут обработаны.
Я подозреваю, что мне придется где-то использовать обещания, но я не настолько знаком с ними.
Вот что у меня уже есть.В настоящее время он написан очень синхронно, но это то, с чем я сейчас наиболее знаком.
require('dotenv').config();
const mysql = require('mysql');
const db = mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE,
});
let items = [
{"type": "A", "col1": "test"},
{"type": "B", "col1": "lorem"}
];
let lastId = 0;
for (let item of items) {
console.log(item);
let query = 'SELECT * FROM testtable1 WHERE id > ? ';
let queryParams = [lastId];
for (let itemProp in item) {
if (item.hasOwnProperty(itemProp)) {
query += ' AND ' + itemProp + ' = ?';
queryParams.push(item[itemProp]);
}
}
console.log(db.format(query, queryParams));
db.query(query, queryParams, (err, results, fields) => {
if (err) throw err;
if (results.length > 0) {
for (let row of results) {
let rowData = {
col1: row.col1,
col2: row.col2
};
db.query('INSERT INTO testtable2 SET ?', rowData, (err, res) => {})
}
}
});
}