webkit执行sql语句和循环问题

webkit executesql sentence and loop problem

本文关键字:循环 问题 语句 执行 sql webkit      更新时间:2023-09-26

我正在尝试在循环包含的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"总是"计数+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"answers"I":

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

有了这一点,我明白了为什么我得到的"结果"为空。我想学习如何获得executeSql的正确结果。

您正在寻找以下内容:

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的引用将正确解析。