如何并行激活两个JavaScript函数?

时间:2010-02-23 13:57:29

标签: javascript ajax

任何人都可以告诉我如何并行激活两个(或更多)JavaScript AJAX函数?

7 个答案:

答案 0 :(得分:14)

这是不可能的。 Javascript只能在单个线程中工作,并且无法实际并行运行两个函数。你需要打一个电话然后另一个电话。当返回数据或发生错误/超时时,将调用这些回调(不一定与调用方法的顺序相同)。只有当一个回调完成时,才允许第二个回调运行。

还要记住,浏览器会限制活动ajax调用的数量。因此,如果您尝试进行太多的ajax调用,可能会等待(阻止所有javascript代码)以完成其他调用。

答案 1 :(得分:6)

搜索网络工作者。这些是现代浏览器中的一种新功能,可能在旧版本中不可用。

答案 2 :(得分:0)

这是你要找的吗?

setTimeout('JsFunction1(val);', 0); 
setTimeout('JsFunction2(val);', 0);

答案 3 :(得分:0)

使用几个'setInterval'可以使并行运行成为可能,尽管它仍然可以在单个核心上运行。以下代码是将函数func与数据“datas”数组并行化的示例。要运行它,请使用Parallel(func,datas),其中func是全局函数的名称,datas是一个数据数组,每个数据都作为func的输入。

var i_array=new Array();
function Parallel(func,datas){
      $(datas).each(function(i,v){
             i_array[i]=setInterval(function(){
                         clearInterval(i_array[i]);
                         window[func](datas[i]);
                         },10);
             });
}

这是jsfiddle test。整数中的时间戳显示两个ajax并行运行。

答案 4 :(得分:0)

使用Web Workers以并行方式运行任务

您可以在此处获得教程:https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers

此外,这个利用网络工作者的图书馆在谷歌上出现得非常快:https://parallel.js.org/

答案 5 :(得分:-1)

使用window.open()调用新页面。该页面将调用第一个js函数。在window.open()调用第二个函数之后,您在技术上并不等待第一个函数完成。你只需等待window.open()执行,然后第二个就会执行。

答案 6 :(得分:-2)

Javascript作为单个线程运行,如果您要进行的请求没有IO,那么这是不可能的,如果涉及IO操作,您可以很好地执行这两个函数另一方面,javascript的本质将在等待IO时开始执行下一个函数。 通常在支持线程的语言中,在线程的CPU休息期间自动实现相同的操作。