(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
})();
从执行的时间来看,setTimeout和ajax还是有区别的。
我理解中的ajax的回调函数也应该在执行栈(3000mm)后开始执行回调函数(因为ajax后台也是延时2秒),也就是说ajax的时间也应该是在3000mm左右,然而现实却不是这样,是我理解错了么?请理解的同学帮我指正一下。
update0:我认为setTimeout执行是对的,而上面的ajax执行是有问题的,请大大们指正
update1:我上面的测试是在火狐浏览器运行的,所以返回了错误的结果,在谷歌浏览器下则是正常的。郁闷,森么情况。。
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
ajax的请求是在sleep执行完后才触发的,再算上"因为ajax后台也是延时2秒"这个时间,确实应该在5s以后。你的疑惑是“
ajax到底是不是在sleep之前触发的,但是callback是在sleep之后触发的”对吧?,答案不是。