我的问题如下。我编写了一个类 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 --;
}