javascript – 你能使用setInterval异步调用函数吗?

以下代码取自Project Silk(Microsoft示例应用程序)
下面的发布方法循环通过一个事件callBacks数组并执行每一个.而不是使用for循环而是使用setInterval.

文档说这允许在前一个回调完成之前调用每个订阅者回调.它是否正确?我认为浏览器不允许在间隔内执行该函数,直到它的所有先前执行完成为止.

这和for循环有什么不同吗?

that.publish = function (eventName, data) 
{
    var context, intervalId, idx = 0;
    if (queue[eventName]) 
    {
        intervalId = setInterval(function () 
        {
            if (queue[eventName][idx]) 
            {
                context = queue[eventName][idx].context || this;
                queue[eventName][idx].callback.call(context, data);
                idx += 1;
            } 
            else { clearInterval(intervalId); }
        }, 0);
    }

解决方法:

在这里使用setInterval会使执行排序为“异步”,因为它会在下次主执行线程可用时安排回调的执行.

这意味着回调执行不应该阻止浏览器,因为任何其他同步处理将在回调之前发生(因为回调被安排为仅在主执行线程具有备用毫秒时运行) – 这就是使这个构造“更好”的原因“比常规for循环 – 回调不会阻止浏览器并导致可怕的事实”这个页面有一个太长的脚本“错误.

这种调度模式的副作用是超时只是一个“建议” – 这就是他们在这里使用0的原因.

见:http://ejohn.org/blog/how-javascript-timers-work/

上一篇:javascript – &符号(&)变成&


下一篇:javascript – Ajax轮询聊天在快速聊天时在消息接收器前端获得重复