我有一个自定义的executeSql语句,我在其中传递一组查询和一组参数,以使其在单个事务中运行得更快。当它执行时,我能够看到每个executeSql的rowsAffected正确填充(我得到一些“受影响的0条记录”,还有一些“受影响的1条记录”)。
输出后我自己确认,我想跟踪总共更新了多少记录。所以我只需添加一个计数器,然后在循环完成后输出该值。但最终结果显示我每次都有0条记录受影响。
这里有什么问题?
ExecuteQueryWhereQueryAndParamsBothArrays: function (queryArray, paramsArray, success, fail) {
var hasError = false;
var counter = 0;
$rootScope.db.transaction(function (tx) {
for (var i = 0; i < paramsArray.length; i++) {
var query = queryArray[i];
var params = paramsArray[i];
tx.executeSql(query, params, function (tx, results) {
window.logger.logIt("results.rowsAffected: " + results.rowsAffected); // this is showing the correct results
counter += results.rowsAffected;
}, function() {
hasError = true;
onError(tx, r);
});
}
});
if (hasError) {
fail();
} else {
window.logger.logIt("successCounter: " + counter); // this always displays 0 (records)
success(counter);
}
},
答案 0 :(得分:0)
您可以尝试将以下代码添加到db.transaction
的成功处理程序中,并检查计数器的值。
var counter = 0;
$rootScope.db.transaction(function (tx) {
...... // Your code.
},errorDB,succesDB)
function successDB(){
window.logger.logIt("successCounter: " + counter);
console.log("successCounter: " + counter); // Your counter variable should contain the total
}
function errorDB(err){
console.log("Error processing SQL:Message:" + err.message + "CODE:" + err.code);
}
答案 1 :(得分:0)
我最终实现了像@frank建议的事务回调,但我的计数器仍为0.虽然results.rowsAffected总是准确的,但由于某种原因,计数器变量永远不能在for循环之外访问。我最终为你的角度人员实现了全局变量($ rootScope。{variablename}),并且每次都从results.rowsAffected那里增加了这个变量,并且有效。
var inc = function(incCounter) {
$rootScope.counter = $rootScope.counter + incCounter;
};
ExecuteQueryWhereQueryAndParamsBothArrays: function (queryArray, paramsArray, success, fail) {
var hasError = false;
var counter = 0;
$rootScope.db.transaction(function (tx) {
for (var i = 0; i < paramsArray.length; i++) {
var query = queryArray[i];
var params = paramsArray[i];
tx.executeSql(query, params, function (tx, results) {
window.logger.logIt("results.rowsAffected: " + results.rowsAffected); // this is showing the correct results
inc(results.rowsAffected);
}, function(tx, r) {
hasError = true;
onError(tx, r);
});
}
}, function () {
fail();
}, function () {
success();
});
},