【发布时间】:2012-02-03 16:15:11
【问题描述】:
我有两个函数,一个函数是重新加载函数,它执行 ajax Web 调用来获取数据。另一个是加载数据的项目加载器。问题是加载数据项的函数由于 ajax 调用还没有值。除了调用 setTimeout 之外,还有什么办法解决这个问题?提前感谢您的帮助。
function reload(index) {
_ListData[index] = null;
DisplayInformation.GetTemplateTableInformation(
ListManager.listReportId(),
ListManager.listParameters(),
ListManager.listSortParams(),
TableReportHelper_TemplateRelatedAction,
reloadRange.min,
reloadRange.num,
function(templateItemIfo) {//success callback causes issues with race conditon in the function itemLookaheadCallback because _ListData[index] = null;
itemLookaheadCallback(templateItemIfo, index);
});
}
这是尝试加载在重新加载回调中调用的项目的函数
function loadDataCallback(lookAheadData, index, loadNeighbors) {
//Store the received value
var item = _ListData[index];//this will be null because of _ListData[index] = null;
item.data = lookAheadData.TemplateInformation;
};
【问题讨论】:
-
你能把你的代码简化为问题的关键吗?
-
+1 以上。缺少上下文。用更通用的方式描述这个问题。
-
对不起,我把代码减少了一点 var item = _ListData[index];将为空,这就是问题所在。函数重新加载回调 itemLookaheadCallback 设置索引项的速度不够快。
-
我认为不可能在这个问题的上下文中回答,因为我们不知道这些函数的作用。但是,作为一般规则,您不应该有一个依赖于 xmlHttpRequest 响应的函数,该响应不是通过该请求的 onreadystatechange 侦听器以某种方式调用的。如果您遵循该规则,您将不会有竞争条件。
-
说有race condition 是不正确的,因为JavaScript 是单线程的; JavaScript 程序中不能存在竞争条件。
标签: javascript ajax callback race-condition