我想允许我的 JavaScript 数据包请求(同步 ajax 调用)其他 JavaScript 数据包:
// 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。也许您会指出没有服务器依赖性的更“简洁”的解决方案。