【问题标题】:webkit executesql sentence and loop problemwebkit执行sql语句和循环问题
【发布时间】:2011-06-27 12:04:37
【问题描述】:

我正在尝试在循环包含的 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 的正确结果。

【问题讨论】:

    标签: javascript webkit closures


    【解决方案1】:

    您正在寻找以下内容:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多