[英]Accessing variable inside WebSQL Function
我使用以下代碼
var Year12=new Array();
GetYear(function(Year12)
{
alert(Year12);
});
function GetYear(callback)
{
var selectAllStatement = "SELECT DISTINCT year FROM mytable";
var db = openDatabase("Postit", "1.0", "Notebook", 200000);
var dataset;
alert("1");
db.transaction(function(tx) {
alert("2");
tx.executeSql(selectAllStatement, [], function(tx, result)
{
alert("3");
dataset = result.rows;
for (var i = 0, item = null; i < dataset.length; i++)
{
item = dataset.item(i);
Year12[i]=item['year'];
}
callback(Year12);
});
});
}
這里沒有執行tx.executeSql語句意味着警報3沒有顯示。有沒有辦法做到這一點
db.transaction
和tx.executeSql
調用是異步的,因此是回調函數。 這意味着GetYear
將在tx.executeSql
回調填充Year12
數組之前完成執行並返回。
一旦你有異步行為和回調,唯一明智的解決方案當然是更多的回調。 你需要一個更像這樣的結構:
function GetYear(callback) {
//...
db.transaction(function(tx) {
//...
tx.executeSql(selectuniqueyearStatement, [], function(tx, result) {
var Year12 = [ ];
//... populate the locale Year12 using result.rows
callback(Year12);
});
});
}
然后像這樣使用它:
GetYear(function(year12) {
// Do whatever you need to do with the year12 array...
});
基本上與AJAX調用使用的代碼結構和策略相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.