【问题标题】:Execution order of multiple setTimeout without delays in angular多个setTimeout的执行顺序无角度延迟
【发布时间】:2019-04-14 03:44:04
【问题描述】:

angular2+中多个setTimeout无延迟的执行顺序是什么?

示例

setTimeout(() => console.log('1'));
setTimeout(() => console.log('2'));

问题

(1) 1 是否总是保证在2 之前打印?
(2) 如果是这样,规范的哪一部分是这样说的?
(3) 这在 Angular2+ 代码中被调用。角度是否会覆盖 setTimeout 的默认行为?

它与其他问题有何不同

这个问题 (1) 毫不拖延地询问这个案例,并且 (2) 在角度上下文中询问它(如果角度覆盖 setTimeout)。

非问题

我知道console.log 可能(或可能不会)是异步的或其他的;这个问题与此无关。你可以假设console.log 是同步的。

【问题讨论】:

    标签: javascript angular settimeout ngzone


    【解决方案1】:

    1) 是的

    2) https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html 的第 16 步:

    等到任何具有相同方法的算法调用 上下文,在此之前开始,其超时等于 或小于这个,已完成。

    3) 不,Angular 不会覆盖它。

    【讨论】:

    • 对于想知道奇异步骤 16 是如何相关的未来读者:这是因为,根据步骤 14,其余步骤是平行的。因此,实际上原始问题中的示例类似于步骤 16 中的奇异示例,因为 2 个 setTimeout 调用的其余步骤确实是并行运行的,但是由于步骤 16,第一个将首先完成(即,执行第 18 步并首先进入队列)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 2016-12-01
    • 2016-12-19
    • 2016-03-24
    • 1970-01-01
    • 2018-09-17
    • 2016-12-26
    相关资源
    最近更新 更多