В то время как все в порядке передавать переменные или объекты в функцию обратного вызова запроса mysql, используя описанную ранее тактику - обертывание функции обратного вызова в анонимной функции - я думаю, что это в значительной степени не нужно, и я объясню, почему Пример:
// This actually works as expected!
function run_query (sql, y) {
var y1 = 1;
connection.query (sql, function (error, rows, fields) {
if (! error)
{
var r = rows[0];
console.log ("r = " + r[1]);
console.log ("x = " + x);
console.log ("y = " + y);
console.log ("y1= " + y);
console.log ("");
}
else
{
console.log ("error = " + error);
}
});
};
var x = 5;
console.log ("step 1: x = " + x);
run_query ("SELECT 1", x);
x = x + 1;
console.log ("step 2: x = " + x);
run_query ("SELECT 1", x);
x = x + 1;
console.log ("step 3: x = " + x);
Производит следующий вывод:
step 1: x = 5
step 2: x = 6
step 3: x = 7
r = 1
x = 7
y = 5
y1= 5
r = 1
x = 7
y = 6
y1= 6
Страх в том, что второй вызов run_query () перезапишет переменную y и / или y1 до первого вызов функции run_query () имеет возможность вызвать функцию обратного вызова. Однако переменные в каждом экземпляре вызываемой функции run_query () фактически изолированы друг от друга, сохраняя день.