【发布时间】:2014-10-05 16:13:38
【问题描述】:
我已经阅读了这些问题:
- JavaScript closure inside loops – simple practical example
- How do JavaScript closures work?
- How do I pass the value (not the reference) of a JS variable to a function?
并尝试应用他们的解决方案(以及至少 1/2 十几个其他实现),但没有一个有效。
这是有循环的函数:
ExecuteQueryWhereQueryAndParamsBothArrays: function (queryArray, paramsArray, idsArray, success, fail, errorLogging) {
var hasError = false;
$rootScope.syncDownloadCount = 0;
$rootScope.duplicateRecordCount = 0;
$rootScope.db.transaction(function (tx) {
for (var i = 0; i < paramsArray.length; i++) {
window.logger.logIt("id: " + idsArray[i]);
var query = queryArray[i];
var params = paramsArray[i];
var id = idsArray[i];
tx.executeSql(query, params, function (tx, results) {
incrementSyncDownloadCount(results.rowsAffected);
}, function(tx, error) {
if (error.message.indexOf("are not unique") > 0 || error.message.indexOf("is not unique") > 0) {
incrementDuplicateRecordCount(1);
return false;
}
// this didn't work: errorLogging(tx, error, id);
// so I wrapped in in an IIFE as suggested:
(function(a, b, c) {
errorLogging(a, b, idsArray[c]);
})(tx, error, i);
return true;
});
}
}, function () {
fail();
}, function () {
success();
});
这是正在写入我的消息的 errorLogging 函数(注意,我无法在同一个 javascript 文件中“写入”消息,因为我需要 [angular] 向该文件中注入另一个引用,它会导致循环引用,代码不会运行)
var onError = function (tx, e, syncQueueId) {
mlog.LogSync("DBService/SQLite Error: " + e.message, "ERROR", syncQueueId);
};
我可以实施什么其他方法来阻止它返回我的同步记录的最后一个“id”(当它只是第一个有错误的记录时)?
【问题讨论】:
-
哎呀,谢谢你关闭这个。但是您引用的那个确切的已经尝试过并且不起作用。
-
我应该将链接指向我尝试过的所有其他实现吗?
-
否,但您可能已经更清楚地表明您已经尝试应用您找到的解决方案。我需要再次查看代码以查看关闭尝试,仅由注释掉的旧版本突出显示。回想起来,这实际上是一个很好的问题。
标签: javascript loops closures