异步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
    属性值毫秒数已过
  • 超时
    属性值不为零
  • 。。。因此,该方法会等待以确保已发送请求(或发生超时)

    下面是一个演示,其中包含对服务的HTTP调用,该服务在服务器端等待2秒后应答。您可以通过两种方式启动它:有或没有密集的工作

    当使用该选项不执行该工作时,单击大约2秒后会返回响应。如果使用其他选项(与工作一起),则工作将在三秒后完成,然后立即处理响应(单击后请耐心等待):

    函数工作(){
    //忙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