Fragster
@Fragster
помогло? отметь решением!

Как правильно получать данные из таблицы сразу после вставки в неё?

Пишу простенькое приложение на 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() резолвился когда все вложенные промисы действительно выполнятся? Или причина не в этом?
  • Вопрос задан
  • 232 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы