firebug 网络显示和 ajax 轮询

2017-08-18 16:18:38 +08:00
 guyeuro

我用注入下面的方式进行轮询,轮询次数为 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 秒一次啊

898 次点击
所在节点    问与答
2 条回复
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 秒后执行。
66beta
2017-08-18 16:32:05 +08:00
楼主好像对 setTimeout 有误会

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/383983

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX