Javascript 是否将额外参数传递给WebSQL回调函数?
我正在使用以下代码调用函数db.transaction:Javascript 是否将额外参数传递给WebSQL回调函数?,javascript,function,callback,web-sql,Javascript,Function,Callback,Web Sql,我正在使用以下代码调用函数db.transaction: db.transaction(createSheetDB, function(){alert("Sheet creation error!")}, function(){alert("Sheet created!")}); 函数createSheetDB是一个回调函数,由db.transaction()隐式调用,它还向它传递一个参数tx。我实现了如下函数createSheetDB(tx): function createShee
db.transaction(createSheetDB, function(){alert("Sheet creation error!")}, function(){alert("Sheet created!")});
函数createSheetDB是一个回调函数,由db.transaction()隐式调用,它还向它传递一个参数tx。我实现了如下函数createSheetDB(tx):
function createSheetDB(tx) {
var nextId = getNextId();
tx.executeSql("INSERT INTO SHEET(id, name, desc) VALUES("+nextId+",'"+sheetName+"','"+desc+"')", [],
function(){alert("Sheet row inserted!")},
function(tx, err){alert("Sheet row insertion Error: "+err.message+" "+err.code)}
);}
现在的问题是sheetName和desc的值仅在调用函数中可用。如何将它们传递到函数createSheetDB(tx)?您可以使用一种技术创建一个新的回调函数,该函数将关闭所需的变量
function doStuff(callback) {
var val = 43;
callback(val);
}
function myCallback(val, anotherVal) {
alert("val: " + val + "\nanotherVal: " + anotherVal);
}
(function() {
var anotherVal = "Whoa!",
anotherCallback = function(val) {
return myCallback(val, anotherVal);
};
doStuff(anotherCallback);
}());
作为函数创建回调
function createSheetDB(sheetName, desc) {
return function(tx){
var nextId = 1;
alert("INSERT INTO SHEET(id, name, desc) VALUES("+nextId+",'"+sheetName+"','"+desc+"')");
/* delete above two lines and uncomment for your code
var nextId = getNextId();
tx.executeSql("INSERT INTO SHEET(id, name, desc) VALUES("+nextId+",'"+sheetName+"','"+desc+"')", [],
function(){alert("Sheet row inserted!")},
function(tx, err){alert("Sheet row insertion Error: "+err.message+" "+err.code)}
);
*/
}
}
// dummy code to show as example
db = {transaction: function(fn,lose,win){return fn(),win();}};
function testIt(){
var sheetName = 'hello',
desc = 'world';
db.transaction(createSheetDB(sheetName, desc), function(){alert("Sheet creation error!")}, function(){alert("Sheet created!")});
// note how createSheetDB is now called with the vars you want
}
泛型案例有很多问题/答案(使用一个绑定到局部变量的闭包,然后调用实回调函数,或者在相同的词法范围内定义实回调函数,或者..),因此希望这个改进的案例更适用。。但是我不使用WebSQL。谢谢@pst,我目前正在使用这种方法来解决我的问题。谢谢@Josh,这个解决方案看起来比shaac的更干净。谢谢@shhac。这个解决方案看起来不错。但对我来说,乔希的那张看起来更干净。虽然可能只有我一个人这很公平。我会发现Josh的方法更难在一大块代码中跟踪变量,这就是为什么我将它们作为一个函数保存在一起。