异步javascript HTTP请求是在主堆栈完成之前还是之后发送的
假设如下:异步javascript HTTP请求是在主堆栈完成之前还是之后发送的,javascript,asynchronous,Javascript,Asynchronous,假设如下: http.get('mycoolwebsite.com/somecontent', function(){ console.log('printed'); } doSomeReallyIntensive100Hourwork(); 据我所知,我们将在100小时后在控制台上看到“printed”一词 问题: javascript是否会在100小时后延迟请求,然后执行回调,还是会立即发送请求并计划稍后打印回调?基本上,我们是否立即注意到网络请求?请求立即启动,响应也可能已经到
http.get('mycoolwebsite.com/somecontent', function(){
console.log('printed');
}
doSomeReallyIntensive100Hourwork();
据我所知,我们将在100小时后在控制台上看到“printed”一词
问题:
javascript是否会在100小时后延迟请求,然后执行回调,还是会立即发送请求并计划稍后打印回调?基本上,我们是否立即注意到网络请求?请求立即启动,响应也可能已经到达,但是您的
get
回调函数将由事件队列中的事件触发,该事件只在下一个任务中处理
从中,在http.get
方法的引擎盖下执行的方法:
XMLHttpRequest.send()
方法发送请求。如果请求是异步的(这是默认情况),则该方法会在发送请求后立即返回
注意最后一部分。另见:
send(body)
方法必须运行以下步骤:
10.4.1等待,直到设置了req的完成标志或
timeout
属性值毫秒数已过超时
属性值不为零函数工作(){
//忙3秒钟
var-till=performance.now()+3000;
while(performance.now()
请求3秒的工作时间
REGEST而不执行该工作
请求将立即启动,响应可能也已到达,但您的get
回调函数将由事件队列中的事件触发,该事件仅在下一个任务中处理
从中,在http.get
方法的引擎盖下执行的方法:
XMLHttpRequest.send()
方法发送请求。如果请求是异步的(这是默认情况),则该方法会在发送请求后立即返回
注意最后一部分。另见:
send(body)
方法必须运行以下步骤:
10.4.1等待,直到设置了req的完成标志或
自这些子步骤启动后,timeout
属性值毫秒数已过
而超时
属性值不为零
。。。因此,该方法会等待以确保已发送请求(或发生超时)
下面是一个演示,其中包含对服务的HTTP调用,该服务在服务器端等待2秒后应答。您可以通过两种方式启动它:有或没有密集的工作
当使用该选项不执行该工作时,单击大约2秒后会返回响应。如果使用其他选项(与工作一起),则工作将在三秒后完成,然后立即处理响应(单击后请耐心等待):
函数工作(){
//忙3秒钟
var-till=performance.now()+3000;
while(performance.now()
请求3秒的工作时间
不进行该工作的REGEST
我们是否立即通知网络请求
这取决于浏览器。JS会立即告诉浏览器它应该执行以下请求,但这取决于浏览器是否有能力立即启动此请求,或者是否将其排队,直到有可用的资源
然后,请求最终被发送,响应就在那里,浏览器将通知JS请求已经完成,并传递接收到的数据。然后JS,一旦JS空闲*,它就会调用回调函数
JS是单线程的。它不能同时运行两段代码,也不会中断其他代码来运行回调函数。一旦没有其他挂起的Javascript运行,它就会调用它
我们是否立即通知网络请求
这取决于浏览器。JS会立即告诉浏览器它应该执行以下请求,但这取决于浏览器是否有能力立即启动此请求,或者是否将其排队,直到有可用的资源
然后,请求最终被发送,响应就在那里,浏览器将通知JS请求已经完成,并传递接收到的数据。然后JS,一旦JS空闲*,它就会调用回调函数
JS是单线程的。它不能同时运行两段代码,也不会中断其他代码来运行回调函数。一旦没有其他挂起的Javascript可运行,它就会调用它。从何处派生的“100小时”引用?网络请求将立即触发,因为它是异步的(请阅读事件循环)。但即使有人准备好回应p