Пишу простенькое приложение на node + mysql
https://github.com/mysqljs/mysql
Все, вроде бы работает, но есть один нюанс:
При вставке нескольких строк и получении данных из таблицы после вставки - в некоторых случаях часть данных может отсутствовать (как будто insert delayed или получение данных до того, как инсерты выполнены).
var pool = mysql.createPool(settings.mysql());
pool.queryPromise = function (sqlquery, params) {
return new Promise((resolve, reject) => {
this.getConnection(function (err, connection) {
// Use the connection
connection.query(sqlquery, params, function (error, results, fields) {
connection.release();
if (error) {
return reject(new Error(error));
} else {
return resolve(results);
}
});
});
});
}
//....
Promise.all(sheduleResult.map(elem => {
return pool.queryPromise('insert into table set ?', [elem]);
})).then( () => {
return pool.queryPromise('select * from table', [])
}).then( result => {
//тут работаем с результатом, так вот, там не всегда все вставленные строки
});
Вставляю по одной строке, потому что так удобнее, на производительность пофиг. А коннекшн пул использую, чтобы не было критических ошибок от разрыва соединения по таймауту. Как сделать так, чтобы Promice.all() резолвился когда все вложенные промисы действительно выполнятся? Или причина не в этом?