【问题标题】:Parameters being passed into Web SQL callback are undefined传递给 Web SQL 回调的参数未定义
【发布时间】:2017-12-20 22:51:46
【问题描述】:

我在使用 3 个变量的 3 个循环内有一个 Web SQL 插入查询 - 一个循环使用 l,第二个使用 k,第三个使用 i。

我正在尝试在插入查询的回调中使用 l、k 和 i,但是当我控制台注销它们时,它们会以未定义的形式出现。

有人知道这个问题的解决方案吗?

tx.executeSql('INSERT INTO items (parameter1, parameter2)' + ' VALUES(?,?);',[1,2], 
	function(tx, results,l,k,i){
		console.log("l =", l)
		console.log("k =", k)
		console.log("i =", i)
	}
);

【问题讨论】:

    标签: javascript web-sql


    【解决方案1】:

    所以如果我正确理解您的问题,变量lki 已经在回调函数的范围之外定义。

    如果您尝试将它们作为参数添加到回调函数中,就像您在代码示例中所做的那样,您实际上是在创建同名的新变量。这有时被称为“阴影”。由于回调仅获得分配给这些参数的两个参数(txresult),因此另一个参数 lki 只是 undefined

    修复代码所需要做的就是从回调中删除参数lki 以避免阴影:

    tx.executeSql('INSERT INTO items (parameter1, parameter2)' + ' VALUES(?,?);',[1,2], 
        function(tx, results){
            console.log("l =", l)
            console.log("k =", k)
            console.log("i =", i)
        }
    );
    

    回调函数在窗口级别执行,因此您的变量也需要在窗口级别声明。

    【讨论】:

      【解决方案2】:

      我猜你遇到了 l、k 和 i 未定义或替换的问题,因为回调花费的时间比预期的要长。 (至少,我的情况是这样的)。

      你可以创建一个函数作为回调,接收所有参数,然后使用bind()传递is作为回调。

      这是你的例子:

         function cb(l,k,i,tx,results)
         {
           console.log("l =", l)
           console.log("k =", k)
           console.log("i =", i)
         }
      
         xcb = cb.bind(null,"one","two","three");
         tx.executeSql('INSERT INTO items (parameter1, parameter2)' + ' VALUES(?,?);',[1,2], xcb, null );
      

      在使用 bind( 的那一行,你可以传递 l,k,i 的变量或值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-05
        • 2016-02-07
        • 1970-01-01
        • 1970-01-01
        • 2016-12-09
        • 2018-08-28
        • 2017-08-17
        相关资源
        最近更新 更多