JavaScriptパケットが他のJavaScriptパケットを要求(同期ajax呼び出し)できるようにしたい:
// 2 sequential synchronous calls
framework.require('packet1'); // time1 ms
framework.require('packet2'); // time2 ms
// use packets
これらの2つのリクエストは、time1+time2ミリ秒で処理されます。したがって、別のアイデアがあります。これらのリクエストをそれぞれ非同期で作成しますが、一連のリクエスト全体が同期的に処理されることを保証します。
// 2 parallel asynchronous calls, synchronous in total
framework.require([
'packet1', // time1 ms
'packet2' // time2 ms
]);
// use packets
私が理解している限り、これはもっと速いはずです。それでは、私の実装を見てみましょう。
framework = {
require_counter:0,
require: function(arr)
{
framework.require_counter = arr.length;
var success = function(data, textStatus, jqXHR)
{
framework.require_counter -= 1;
}
var error = function(jqXHR, textStatus, errorThrown)
{
framework.require_counter -= 1;
// some error notification
}
// asynchronous calls
for (var i = 0; i < arr_js.length; i++)
$.ajax({
url: arr_js[i],
success: success,
error: error
});
// wait
while (framework.require_counter > 0)
framework.wait();
// finally return
}
}
最も難しい部分は、そのwait()関数を実装することです。JavaScriptはそれを提供しません。別の解決策を見つける必要があります。非同期のsetTimeout()は答えではありません。それが私の質問です:wait()関数を実装する方法は?または多分別の一般的な解決策がありますか?
私はこのアプローチを試しました:http://narayanraman.blogspot.com/2005/12/javascript-sleep-or-wait.html。たぶん、サーバーに依存しない、より「簡潔な」ソリューションを指摘するでしょう。