私の問題は次のとおりです。コンストラクターに新しいXMLHttpRequestオブジェクトを作成するクラスAJAXEngineを作成しました。このクラスには、応答Analyserというメソッドが含まれています。このメソッドは、XMLHttpRequestオブジェクトの「onreadystatechange」が変更されたときに呼び出されます。これで、AJAXEngineの4つのインスタンス=>4つのXMLHttpRequestオブジェクトを作成しました。
これで、AJAXEngineのインスタンスを保持する配列属性dataReqを持つ別のクラスDataRequesterができました。プログラム全体でDataReqeusterのインスタンスは1つだけです。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 --;
}