V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
guyeuro
V2EX  ›  问与答

firebug 网络显示和 ajax 轮询

  •  
  •   guyeuro · 2017-08-18 16:18:38 +08:00 · 944 次点击
    这是一个创建于 2654 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    2 条回复    2017-08-18 16:32:05 +08:00
    noe132
        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 秒后执行。
    66beta
        2
    66beta  
       2017-08-18 16:32:05 +08:00
    楼主好像对 setTimeout 有误会
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   962 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 20:31 · PVG 04:31 · LAX 12:31 · JFK 15:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.