Javascript setTimeout保证呼叫顺序?

时间:2017-06-19 06:51:58

标签: javascript asynchronous settimeout

setTimeout(funcA, 0)
this.setState() //react async call
setTimeout(funcB, 0)

对于上面的代码,执行的顺序是funcA>更新到this.state> funcB

AFAIK,Javascript没有多线程,因此asyn调用只是被推入队列。这只是一个FIFO队列还是优先级队列?

2 个答案:

答案 0 :(得分:1)

以pms为参数的

setTimeout()是一种在调用堆栈清空时推迟任务的方法。

这意味着在执行以下代码时:

setTimeout(funcA, 0)
this.setState() //react async call
setTimeout(funcB, 0)
  1. funcA已添加到任务队列
  2. this.setState添加到调用堆栈并立即执行并返回
  3. funcB已添加到任务队列
  4. 因此,只有this.setState()立即被调用,funcAfuncB将被添加到有序任务队列中,因此它们将被调用 in为了

    据我了解,从spec开始,它是一个FIFO队列。

答案 1 :(得分:0)

您不能依赖于微任务的排序。如果您想强制执行订单,并假设funcA是同步的,那么

setTimeout(() => {
  funcA();
  this.setState().
    .then(funcB);
});