【发布时间】:2009-08-14 07:53:11
【问题描述】:
我的问题如下。我编写了一个类 AJAXEngine,它在构造函数中创建了一个新的 XMLHttpRequest 对象。该类包含一个名为 responseAnalyser 的方法,当 XMLHttpRequest 对象的“onreadystatechange”发生变化时调用该方法。 所以现在我创建了 4 个 AJAXEngine => 4 XMLHttpRequest 对象的实例。
现在我有另一个类 DataRequester,它有一个数组属性 dataReq,它保存 AJAXEngine 的实例。整个程序中只有一个DataReqeuster实例! DataRequester 有一个名为 callWhenFinished 的函数。该函数被函数调用 AJAXEngine 的 responseAnalyser 并减少 DataRequester 实例的变量。
但是,我认为会发生竞争条件。我如何在 JavaScript 中预防它们?
function AJAXEngine
{
this.httpReqObj = //create new XMLHttpRequest Object
this.obj;
this.func;
}
AJAXEngine.prototype.responseAnalyser = function()
{
if(this.httpReqObj.readState == 4)
{
this.func.call(this.obj);
}
}
AJAXEngine.prototype.fireReq = function(o, f)
{
this.obj = o;
this.func = f;
// fire ajax req
}
function DataRequester()
{
this.dataReq = new Array();
this.test = 4;
for(var i = 0; i < 4; i ++)
{
this.dataReq[i] = new AJAXEngine();
}
}
DataRequester.prototype.callWhenFinished = function()
{
this.test --;
}
【问题讨论】:
标签: javascript ajax xmlhttprequest race-condition