gpt4 book ai didi

javascript - 使用 jquery 进行异步调用

转载 作者:行者123 更新时间:2023-11-28 11:41:22 26 4
gpt4 key购买 nike

我有一个名为 checkStatus(x) 的函数,其中 x 是 Id。我怎样才能异步调用这个函数n次?无需依赖他人来完成并依赖他人来开始?

我正在使用jquery

编辑:

我不确定我是否使用了正确的术语,但这就是我想要的。我有一个 ID 列表,我遍历一个列表,我想为每个 ID 执行这个函数。

但我不想等待一个 id 完成,然后在另一个 id 上执行此函数。是否可以同时执行这个函数?

最佳答案

Javascript 引擎是单线程的,这意味着一次只能执行一段代码。异步功能(AJAX、 timeouts/intervals )会导致不同的代码块按顺序运行,而不是并行运行(即,您永远不会在 Javascript 中使用多个处理器核心)。

正如其他人所建议的,生成异步(非阻塞)代码的最简单方法是使用 setTimeout ( I strongly discourage using setInterval ),但这样做不会带来性能优势。这只是通过允许浏览器的其他任务(例如页面重绘和用户输入)有机会运行来确保您的浏览器在缓慢的 JS 计算期间不会“挂起”。它实际上不会提高这些计算的速度(事实上,由于超时的额外开销很小,它会稍微减慢它们)。

可以使用web workers在Javascript中创建单独的线程。 ,但它们的功能是有限的(例如,它们无法更改 DOM)和 they are not yet supported by 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);
}
}

关于javascript - 使用 jquery 进行异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4831276/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com