[英]making asynchronous calls with jquery
我有一个名为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);
}
}
使用setTimeout
或setInterval
函数。
setTimeout(function(){checkStatus(x);}, 100);
setTimeout(function(){checkStatus(x);}, 200);
setTimeout(function(){checkStatus(x);}, 300);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.