2016-11-22 2 views
-4

Я не могу получить доступ к данным [i] в ​​функции обратного вызова.
Это мой код:Объект Access Array в обратном вызове

var data = ['HI', 'Hi2']; 

for(var i=0;i<data.length;i++){ 
console.log(data[i]); // Just works fine 
//use mysql to query database 
mysql.query('some sql stuff', function(err,result){ 
    console.log(data); // Just works fine 
    console.log(data[i]); // Doesn't work 
    } 
); 
} 
+2

Я думаю, что 'i' не существует в вашем возврате' mysql.query'. Попробуйте 'console.log (i)' вместо 'console.log (data [i])' – driconmax

+0

это не то, что я ищу. Я хочу, чтобы число i массива данных – vincent0110

+0

Хотя, вероятно, это не относится к вашей проблеме, - что я не вижу очевидного решения - вы, вероятно, не видите 'var' перед объявлением переменной итерации (то есть,' var i = 0'). –

ответ

0

К тому времени ваш первый SQL запрос заканчивается цикл завершается, и значение i является 1, так что я бы ожидать, что ваш код для входа hi2 дважды. Переместите запрос за пределы цикла for.

var data = ['HI', 'Hi2']; 

for(i=0;i<data.length;i++){ 
    console.log(data[i]); // Just works fine 
    //use mysql to query database 
    logStuff(i); 
} 

function logStuff(i) { 
    mysql.query('some sql stuff', function(err,result){ 
    console.log(data); // Just works fine 
    console.log(data[i]); // Doesn't work 
    }); 
} 
+0

ОК спасибо. которые работают на данный момент :) – vincent0110

+0

'data.forEach (функция (значение, индекс) { \t mysql.query ('...', function (err, result) { \t \t console.log (индекс, значение, err || result); \t}); }) ' – Thomas

Смежные вопросы