gpt4 book ai didi

javascript - 你可以使用 setInterval 来异步调用函数吗?

转载 作者:搜寻专家 更新时间:2023-11-01 05:15:10 26 4
gpt4 key购买 nike

以下代码取自 Project Silk(Microsoft 示例应用程序)下面的发布方法循环遍历一组事件回调并执行每个回调。不使用 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 - 你可以使用 setInterval 来异步调用函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9323685/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com