Как закрыть соединение после выполнения всех запросов MySQL?
Короче так: у меня скрипт посылает много запросов на вставку данных в MySQL - надо понять когда пройдут все запросы и закрыть соединение.
При этом все выполняется не последовательными запросами, а в цикле с кучей вложенных forEach (парсер). Как быть? Нужно чтобы скрипт завершался, а не висел, т.к. требуется его постоянный перезапуск по завершению
Да, Node.js
В тегах было - в тексте не написал
IceJOKER: спасибо, но там написано только какой командой закрывать, а мне бы понять куда ее лепить, чтобы не закрыть раньше времени (до завершения всех запросов)
var connection = mysql.createConnection({
host : '127.0.0.1',
user : 'root',
password : 'password',
database : 'database'
});
connection.connect();
var obj = {};
obj.one = 'http://blablabla'; //big big big json
obj.two = 'http://blablabla'; //big big big json
obj.three = 'http://blablabla'; //big big big json
function doparse(url){
//Тут получаем данные json по url и преобразуем их в объект
body = JSON.parse(body);
var events = body['events'];
async.each(events, function(event, callback){
var markets = event['markets'];
markets.forEach(function(market){
var runners = market['runners'];
runners.forEach(function(runner){
prices = runner['prices'];
prices.forEach(function(price){
var inserted_data = [...........]; //вставляемые данные
connection.query('INSERT blablabla', inserted_data, function(err, result){
//Обработка ошибок и просто console.log
});
});
});
});
});
}
async.each(obj, function(url, callback){
doparse(url);
});
Вячеслав Грачунов: вот очень неплохой наглядный пример Как организовать promise в NodeJS при запросах к большому числу серверов? , отдельно обратите внимание, что единичный промис и готовый результат и ошибку отправляет в then. Это сделано, чтобы при исполнении промисс алл не потерять часть задач при ошибке в единичном промисе. Переводя на ваш пример, каждый запрос к скулю это промис, где что результат , что ошибка отправляются в ресольв. Далее собираете мапу этих промисов и пуляете в промис алл, где после завершения вссех из них в then делаете закрытие базы.