我用注入下面的方式进行轮询,轮询次数为 4 次
for(var i=0;i<=3;i++){
setTimeout(function(){
$.ajax({
url: 'www.baidu.com',
type: 'post',
data: { uuid : "${two}" },
dataType: 'json',
success: function (data) {
//parent.$.jBox.tip(data);
alert(data);
}
})}, 20000);
然后在 firebugy 以及 chrome tool 的网络项下,我进行观察
我发现半天没反应
然后突然间一下子所有 4 个请求都出现了
这是怎么回事?
预期应该是 2 秒一次啊
1
noe132 2017-08-18 16:29:37 +08:00
javascript 的 event loop 是在主线程完成后进行的。
for 循环里所有内容都是主线程。 setTimeout 会将异步函数 push 进 task queue 意思就是一次性将 4 个 function push 进了 taskqueue。 20000ms 后 4 个函数会依次执行。 Q:半天没反应 A:你写的是 20000 不是 2000 Q:突然一下 4 个请求都出现了 A:上面的 event loop 解释了。如果要按顺序执行,可以写回调,或者 2,4,6,8 秒后执行。 |
2
66beta 2017-08-18 16:32:05 +08:00
楼主好像对 setTimeout 有误会
|