【问题标题】:What is functionality of zeroed $timeout in angularjs?angularjs中归零$超时的功能是什么?
【发布时间】:2014-02-07 18:19:38
【问题描述】:

有时为了让代码正常工作,我们使用 zeroed $timeout:

$timeout(function () {
    /* some stuff goes here */
  }, 0); 

我们在控制器、指令链接中使用它......

我尝试了解上述行给我们的信息,发现类似于互斥锁,它暂停摘要循环,直到所有模块都加载。

这是 example(@Maxim 回答)证明了这个问题

有人能解释一下这个问题吗?

谢谢,

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    Angular 的$timeout 基本上是setTimeout 上的漂亮API。 JavaScript 是一种异步的、基于事件的语言,所以setTimeout 不会停止执行,它只是基本上告诉浏览器

    “请在 X 秒后运行这段代码,但在那之前继续执行后面的任何代码”

    该语句的最后一部分始终受到尊重,即使 超时 为 0。

    所以发生的情况是,您传递给$timeout 的函数中的代码会在在调用$timeout 之后的每一段代码之后执行。

    【讨论】:

    • Royi Namir 在他的回答中描述了它有用的一个原因。
    • 所以超时我只是降低执行优先级,对吧?
    • 超时时间为 0,是的。
    • 但请不要将其用作您应用程序中的通用架构机制。这会导致一些非常难以理解的代码。只有在别无选择时才使用它。到时候你就会知道了。
    【解决方案2】:

    与 NG 无关。

    这与您希望浏览器在两者之​​间做其他事情有关。

    否则 - 浏览器可能会卡住。

    这是告诉浏览器的一个技巧:“我知道你很忙 - 因此 - 不要忘记我并尽快执行此操作”

    【讨论】:

    • 即使超时0?谢谢。请查看我发布的链接。如果没有 o 超时,该示例将不起作用
    • @fessy 是的。 您希望将长时间运行的循环或计算分解为更小的组件,以使浏览器不会出现“冻结”或说“页面上的脚本正忙”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多