我有一个 .aspx 页面,我使用的是第三方javascript编辑器 - CodeMirror 。在切换选项卡时,当我离开编辑器选项卡并返回时 - 编辑器的内容不会刷新。这是CodeMirror的一个已知问题,人们使用专用的Refresh函数来处理它。在我的解决方案中,我通过 Knockout 数据绑定在 Bootstrap 标签切换期间调用它。问题在于,它本身并不起作用,所以人们所做的就是添加一个延迟":
setTimeout(function () {
editor.refresh();
}, 1);
......然后才行。 1毫秒甚至不重要,因为我可以给它一个0毫秒的延迟,它仍然可以工作。如果我删除了setTimeout函数 - 突然CodeMirror没有刷新(可能会尝试刷新太早,并且与应用程序的当前状态相对应)。
因此,我们假设延迟被宣布为0毫秒。
1)这里到底发生了什么?我正确理解,浏览器偶然发现了setTimeout函数,并且通常会将其从执行队列中取出然后等待的最近可能窗口至少 0 ms。在实践中,这引入了延迟。是对的吗?或者是否有其他东西使这项工作?
2)理论上它可能不起作用吗?我的意思是,我会理解在某些环境中,延迟可能太小而无法正常工作,对吗?另外,实际上是否有可能在ASP.NET / knockockout场景中,可能没有引入延迟?
3)我能以某种方式计算或扣除任何确定性的最小延迟吗?我能否确信延迟至少为X ms?
一般来说,我没有信心提出一个看起来如此不确定的解决方案。目前看来它有点像是在工作,因为它引入了一些/任何"延迟。有人能够对此有所了解吗?