传递给Web SQL回调的参数未定义

时间:2017-12-20 22:51:46

标签: javascript web-sql

我在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)
	}
);

2 个答案:

答案 0 :(得分:1)

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

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

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

i

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

答案 1 :(得分:0)

我猜您在l,k上遇到问题,并且由于回调花费的时间比预期的长,我变得未定义或被替换。 (至少我的情况就是这样)。

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

这是您的情况的一个示例:

   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的变量或值。