如何才能返回以下JavaScript row
以便我可以在事务外访问它?所有Apple的示例代码似乎都在事务中将HTML写入浏览器,而不是将数据传递回调用函数.
沿着:
function getData() { db.transaction(function(tx) { tx.executeSql("SELECT id FROM table LIMIT 1", [], function(tx, result) { row = result.rows.item(0); }, function(tx, error) { }); }); return row; }
这甚至可能吗?Webkit存储API可以设置为同步而不是异步执行吗?
我认为你想在这里创建一个闭包,因为在你可以访问它们之前,值被垃圾收集/移出范围链.传递row
给一个闭包以便以后访问,或者传递给一些其他函数,这些函数可以处理仍然在范围内的值.
更多信息:使用闭包
我意识到这是一个非常古老的问题,但我在搜索如何处理JavaScript异步SQLite调用时发现了它.问题和我的一样,我找到了一个更好的答案(使用闭包扩展所选答案)
我的getData函数版本如下:
function get_option (option, get_option_callback){ if (db === null){ open_database(); } db.transaction(function (tx) { tx.executeSql("SELECT rowid,* FROM app_settings WHERE option = ? ", [option], function(tx, result){ item = result.rows.item(0); get_option_callback(item.value); return; } }, sql_err); }); }
然后调用我将使用的方法:
get_option("option name", function(val){ // set the html element value here with val // or do whatever $('input[name="some_input"]').val(val); });