Это называется IIFE. Так как запрос к базе - асинхонный, а for - синхонный, он отрабатывает быстрее, сохраняя внутренее значение i на финальной итерации. Это значит, что вам нужно замкнуть для каждого вызова i, что-бы он стал локальным. Это проблема var переменны, так как имеют область видимости всей функции, а не блока. Это можно решить:
1 вариант - по старинке:for (var i=0, len = vendors.length; i < len ; i++) {
(function (i) {
console.log(i);
connection.query('SELECT * FROM `brends` WHERE `brend_parrent`="'+vendors[і].id_folders+'";', function(err, rows, fields) {
if (err) throw err;
console.log(i);
});
})(i);
}
2 - с использованием ES6 let:for (let i=0, len = vendors.length; i < len ; i++) {
console.log(i);
connection.query('SELECT * FROM `brends` WHERE `brend_parrent`="'+vendors[і].id_folders+'";', function(err, rows, fields) {
if (err) throw err;
console.log(i);
});
}