嗯,首先我要说的是我在互联网开发领域有点新鲜。
无论如何,我试图知道是否可以使用javascript并行运行两段代码。
我真正需要的是调用远程服务器中的两个方法。我为两者传递了一个回调函数,该函数将在我想要的数据准备就绪后立即执行。由于运行这些功能的服务器需要一些时间来回答,我正试图找到一种同时调用这两种方法的方法,而不需要等到第一次完成调用第二种方法。
像setTimeout这样的方法是否会同时运行,例如
setTimeout(func1, 0);
setTimeout(func2, 0);
...
function func1()
{
webMethod1(function() {alert("function 1 returned"); } );
}
function func1()
{
webMethod2(function() {alert("function 2 returned"); } );
}
被修改
我刚刚发现这篇文章对于下一代浏览器的发布可能非常酷:Javascript web workers
答案 0 :(得分:7)
在普通的WebBrowsers中,Javascript中有单个线程执行:您的计时器处理程序将被串行调用。使用计时器的方法适用于您出现的情况。
John Resig有一个 nice piece of documentation on timers (非常受欢迎的jQuery javascript框架的作者 - 如果你是Web开发新手,我建议你查阅一下)。
现在,如果您指的是基于HTML5的浏览器,那么在某些时候,它们应该具有线程支持。
答案 1 :(得分:2)
是的,这正是通过AJAX进行Web请求的方式。不需要setTimeout
到0,你可以逐个调用它们,并发出一个AJAX请求,它将异步执行,允许你传递一个回调函数,以便在请求完成时调用。 / p>
创建AJAX请求的方法因您运行的浏览器而异。如果您打算构建一些在很大程度上取决于AJAX的东西,并且您希望它能够在多个浏览器中运行,那么您最好使用库。以下是它在jQuery中的完成方式,例如:
$.ajax({ url: '/webrequesturl', success: function(result) {
// this will be called upon a successful request
} });
$.ajax({ url: '/webrequest2url', success: function(result) {
// this will be called upon a successful request
// this may or may not be called before the above one, depending on how long it takes for the requests to finish.
} });
答案 2 :(得分:2)
好吧,JavaScript是单线程,两个计时器会一个接一个地顺序运行,即使你没有注意到它。
我建议你看看下面的文章,它真正解释了定时器和异步事件的工作原理,它还将帮助你理解JavaScript的单线程特性:
作为替代方案,您可以查看WebWorkers,这是一种在单独的后台线程中运行脚本的方法,但它们仅受现代浏览器的支持。
答案 3 :(得分:0)
您正在寻找的是异步客户端 - 服务器通信(关键字:async)。异步函数会立即返回,但在满足指定条件后将执行提供的回调。
因此,如果向服务器发送请求的函数是异步的,这将允许您将两个请求发送到服务器而无需等待响应。
使用setTimeout
可能有效,因为这将调度两个请求发送函数。但是,有些浏览器一次只运行一个Javascript线程,结果是其中一个调度函数会运行并阻塞(等待回复),另一个调度函数将等到第一个完成开始运行。
建议您使用服务器通信库的异步支持。例如,jQuery默认使用async。
答案 4 :(得分:-2)
这取决于JavaScript引擎。