webkit выполняет проблему предложения и цикла - PullRequest
1 голос
/ 27 июня 2011

Я пытаюсь использовать переменную цикла в функции executeSql, которая содержится в цикле. Но переменная цикла получает последнее значение, если я не использую замыкание. Когда я использую замыкание, я не получаю список результатов из функции executeSql. Примеры:

for (var i = 0; i < count; i++) {
tx.executeSql('SELECT AColumn FROM ATable WHERE refID=' + i, [],
function(tx,results) //success function
{
//do something
}
,errorfunction);

}

В случае успеха функция «i» всегда равна «count + 1».

Чтобы решить эту проблему, я изменил свой код следующим образом:

for (var i = 0; i < count; i++) {
tx.executeSql('SELECT AColumn FROM ATable WHERE refID=' + i, [],
(function(tx,results) //success function
{
//do something
})(i)
,errorfunction);
}

С этим я получаю правильное «я». Но «результаты» не определены.

Я пытался передать "tx" и "i" следующим образом:

    (function(tx,results) //success function
    {
    //do something
    })(tx,null,i)

С этим я понимаю, почему я получаю "результаты" как ноль. Я хочу узнать, как я могу получить правильные результаты executeSql.

1 Ответ

3 голосов
/ 27 июня 2011

Вы ищете следующее:

for (var i = 0; i < count; i++) {
   tx.executeSql('SELECT AColumn FROM ATable WHERE refID=' + i, [],
      (function(i){
         return function(tx,results) //success function
         {
            //do something
         };
      })(i),
   errorfunction);
}

В конце дня вам нужно передать функцию сигнатуры function(tx,res), которая, несомненно, делает то, что делает целое (function(i){ return function(tx,res){ ... }; })(i), так каквнешняя анонимная функция выполняется немедленно и возвращает функцию этой сигнатуры.

Значение i в этой внутренней функции имеет значение i при вызове внешней функции (то есть значение каждой итерации), поскольку значение i передается по значению во внешнюю анонимную функцию, поэтому ссылки на i в возвращенной внутренней функции разрешатся правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...