0
相關問題(不工作):的WebSQL成功回調不能訪問變量
scope-troubles-in-javascript-...
Pass extra parameters to WebSQL callback function?
我有一個「登錄」對象捕捉到一些成功或錯誤變量作爲的WebSQL事務循環遍歷查詢。循環中有一個循環,循環遍歷從服務器以數組中對象的形式提供的數據輸入,基本上是表格,然後是行。這一切都工作正常,直到sql-query的內部成功回調(不是最終的事務成功)被調用。正如你可以從下面看到的,我嘗試調用函數構建器函數來捕獲表名變量,但是當返回的函數被調用時它是未定義的。我嘗試了很多方法,但是我最終只能使用未定義的或最後一個表的條目。
我試圖簡化我下面的代碼,重點考慮的問題,有些代碼可能是messy.I明白爲什麼它不提供因異步但不知道如何避開它。
addServData = function(data){
var columns, colCount, rowCount, Q, Qmks, table,
rows, dataWatch = {success:{},error:{}};
/*var tableName; //<-- MOVED THIS INTO LOOP AS THOUGHT WAS THE PROBLEM*/
oDb.transaction(function(tx){
for(var key in data){
var tableName = key;
table = data[key];
rows = table.data;
columns = table.columns;
colCount = table.colLen;
rowCount = table.rowLen;
if(rowCount <= 0) continue;
...
Q = 'BUILD QUERY.... (?,?,?)';
for(var x = rows.length-1; x >=0; x--){
var $i = rows.length - (x+1);// <-- INVERT COUNTER
//sort row object to array in order of colums;
var row = rows[$i],
params = utils.sortObjtoArr(row, columns);
tx.executeSql(Q, params,
buildCallback(tblName),
function(tx,error){
console.log('error: ', tx,error);
dataWatch.error[tblName + '::' + params[0]] = error;
});
}
}
function buildCallback(tbl){
//console.log('buildcallback'+tblName, tx); //PRINTS CORRECT NAME;
return function(tx,success,tbl){
console.log('success: ', tx, success, 'tblN:',tbl);//TBL = UNDEFINED;
dataWatch.success[tbl + '::' + success.insertId] = success.rowsAffected;
dataWatch.added += parseInt(success.rowsAffected);
}
}
}, function(tx,error){
console.log(error, dataWatch);
},
function(tx,success){
console.log('success', dataWatch); //WORKS
});
}