bra*_*ter 3 javascript queue settimeout
我希望能够通过JavaScript发送大量工作,以便在浏览器中始终保持响应.
我正在尝试采取的方法是将工作分块,将每个块传递给一个函数,然后通过setTimeout(func, 0)调用对其进行排队.
我需要知道所有工作何时完成,所以我将返回的计时器ID存储在地图中(id - > true | false).在我有计时器ID之后,在下一个代码块中将此映射设置为false,并且排队函数在完成时将映射设置为true ...当然,排队函数不知道其计时器ID.
也许有一个更好/更简单的方法...或者我可以根据需要操作地图的一些建议?
我会将数组排队,使用一个超时来处理队列,并在队列为空时调用回调.就像是:
var work = [...];
var run = function(work, callback) {
setTimeout(function() {
if(work.length > 0) {
process(work.shift());
setTimeout(arguments.callee, 25);
}
else {
callback();
}
}, 25);
};
run(work, function() {
alert('Work is done!');
});
Run Code Online (Sandbox Code Playgroud)
由于浏览器中的JavaScript是单线程的,因此运行多个超时没有真正的优势(至少我认为这就是你正在做的事情).它甚至可能会降低浏览器的速度.
| 归档时间: |
|
| 查看次数: |
2678 次 |
| 最近记录: |