我有一个函数checkStatus(x),其中x是Id.如何异步调用此函数n次?没有完全依赖另一个完成而另一个开始?
我正在使用jquery
编辑:
我不确定我是否使用了正确的术语,但这就是我想要的.我有一个ID列表,我通过列表迭代,我想为每个ID执行此函数.
但我不想等待一个id芬兰语,然后在另一个id上执行此函数.是否可以同时执行此功能?
Javascript引擎是单线程的,这意味着只有一段代码一次执行.异步功能(AJAX,超时/间隔)导致不同的代码块按顺序运行,而不是并行运行(即,您将永远不会在Javascript中使用多个处理器内核).
产生异步(非阻塞)代码的最简单方法是使用setTimeout(我强烈反对使用setInterval),正如其他人所建议的那样,但这样做没有性能优势.这通过允许浏览器的其他任务(例如页面重新绘制和用户输入)运行的机会,确保浏览器在慢速JS计算期间不会"挂起".它实际上不会提高这些计算的速度(事实上,由于超时的额外开销很小,它会稍微减慢它们).
它是可以创建使用在Javascript单独的线程网络工作者,但他们的能力是有限的(例如,他们不能改变DOM)和他们还没有支持IE.
使用"递归" setTimeout调用的长时间非阻塞任务的示例:
function getStarted(elements) {
// this function must be inside the outer function
// so that `i` (below) can be accessed via a closure
function processElement() {
// do work on elements[i] here
// or pass it to another function
// this continues only if we haven't hit the end of the array,
// like the second and third clauses of a `for` loop
if (++i < elements.length) {
setTimeout(processElement, 0);
}
}
// don't bother with empty arrays
if (elements.length) {
// the same `i` is used each time processElement runs
// and acts just like a `for` loop index
var i = 0;
// optional: make a copy of the array so that it
// doesn't get modified while we're working
elements = elements.slice();
// even a zero-millisecond "delay" gives the browser the
// opportunity to run other code
setTimeout(processElement, 0);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4449 次 |
| 最近记录: |