javascript - 关于ajax和setTimtout的执行区别
天蓬老师
天蓬老师 2017-04-10 16:51:16
[JavaScript讨论组]
(function () { 
    console.time('ajax');
    console.time('sync');
    console.time('setTimeout');
    
    $.post('../ajax1.php').done(function (data) {
        // ajax后台sleep(2);
        console.timeEnd('ajax');  // 5080.77ms
        console.log(data);
    });
    
    setTimeout(function () { 
           console.log('settimeout');
           console.timeEnd('setTimeout');     // 3090.22ms
    }, 2000);
    
    function sleep(miliSeconds) {
        var data = new Date().getTime();
        var getNowTime = function () {
            return new Date().getTime();
        }
        while ( getNowTime() < (data + miliSeconds) );
    }
    
    // 执行栈延迟3秒后执行
    sleep(3000);
    
    console.timeEnd('sync');  // 3010.58ms
})();

从执行的时间来看,setTimeoutajax还是有区别的。
我理解中的ajax的回调函数也应该在执行栈(3000mm)后开始执行回调函数(因为ajax后台也是延时2秒),也就是说ajax的时间也应该是在3000mm左右,然而现实却不是这样,是我理解错了么?请理解的同学帮我指正一下。

update0:我认为setTimeout执行是对的,而上面的ajax执行是有问题的,请大大们指正

update1:我上面的测试是在火狐浏览器运行的,所以返回了错误的结果,在谷歌浏览器下则是正常的。郁闷,森么情况。。

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(1)
PHP中文网

ajax的请求是在sleep执行完后才触发的,再算上"因为ajax后台也是延时2秒"这个时间,确实应该在5s以后。

你的疑惑是“ajax到底是不是在sleep之前触发的,但是callback是在sleep之后触发的”对吧?,答案不是。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号